Arhiva za ‘programski jezik c’ tag
Šta je problem 2038 godina?
Kompjuterski problem koji se odnosi na 2000 godinu razume većina ljudi, pogotovo što se svojevremeno jako mnogo govorilo o tome. Ukratko, problem sa 2000 godinom je bio taj što su ranije mnogi programeri u svojim programima koristili 2-cifreni format za godinu (npr. umesto “1991” koristili su “91”), tako da se stvorila realna opasnost da takvi programi neće ispravno raditi 1.1.2000 godine. Koristeći ovakav format za većinu programa stvorio je problem kada se ušlo u “00” godinu jer rogram ne zna da li da to tumači kao “1900” ili “2000” godinu. Sve u svemu taj problem je rešen i daleko je iza nas. Ono što ste možda čuli jeste problem sa 2038 godinom.
Šta je problem 2038 godina?
Većina programa pisanih u programskom jeziku C relativno su imuni na problema 2000 godina, ali zato imaju problem sa 2038 godinom.
Ovaj problem nastaje zbog toga što većina programa pisanih u programskom jeziku C koristi biblioteku rutina koja se zove standard time library (standardna biblioteka vremna). Ova biblioteka uspostavlja standardni 4-bajti format za skladištenje vremenskih vrednosti, a takođe pruža i niz funkcija za konvertovanje, prikazivanje i računanje vrednosti vremena.
Standardni 4-bajtni format (32-bitni integer) pretpostavlja da je početak vremena 1. januar 1970, u 12:00:00. Ova vrednost je 0 vrednost (nulta vrednost). Svaki vremenska vrednost izražena je kao broj sekundi nakon te nulte vrednost. Dakle, vrednost 919642718 predstavlja 919.642.718 sekundi proteklih od 12:00:00 1. januara 1970. To znači da je nedelja, 21. februar 1999, u 16:18:38 Pacifičko vreme (SAD). Ovo je zgodan format jer ako oduzmete bilo koje dve vrednosti ono što dobijate je broj sekundi koji je vremenska razlika između njih. Zatim možete da koristite druge funkcije u biblioteci da bi utvrdili koliko je minuta / sati / dana / meseci / godina prošlo između ta dva vremena.
S obzirom da se radi o 4-bajtnom vremenskom formatu, a 4-bajtni integer ima maksimalnu vrednost 2.147.483.647, to znači da će se javiti problem 2038 godine. Maksimalna vrednost vremena, pre nego što pređe u negativnu (i nevažeću) vrednosti je 2.147,483.647, što u prevodi znači, 19. januar 2038 godine. Na ovaj datum, svi C programi koji koriste standardnu vremensku biblioteku imaće problem sa računanjem vremena.
Problem 2038 godina poznat je i kao Unix Millennium Bug jer većina Unix sistema koristi ovaj vremenski format.
Srećom, ovaj problem je donekle lakše popraviti nego problema sa 2000 godinom. Dobro napisani programi mogu jednostavno da se kompajliraju sa novom verzijom biblioteke koja koristi, na primer 8-bajtnu vrednost. To je moguće zato što biblioteka sažima sve vremenske aktivnosti sa sopstvenim vremenskim tipovima i funkcijama. Dakle, problem 2038 godine ne bi trebao predstavljati neki veći problem.