Unix vreme i zapis ISO 8601
Jedinica izvan SI · veličina: trenutak kao ceo broj sekundi od 1970. godine
Devetnaestog januara 2038. godine u tri sata četrnaest minuta i sedam sekundi svetskog vremena tridesetdvobitni brojač sekundi doći će do 2 147 483 647 — najvećeg broja koji je kadar da obuhvati. Sledeći otkucaj podići će najviši bit, i ista ta binarna reč čitaće se već kao negativna: satovi koji čuvaju vreme upravo ovim brojanjem naći će se ne u 2038, nego u decembru 1901. Zanimljivost daleke budućnosti to nije — industrijski upravljač ili vodomer služi duže od tih dvanaest godina koje su ostale.
Brojanje je sazdano krajnje prosto: sekunde teku jedna za drugom od ponoći prvog januara 1970. godine, a dan u njemu sadrži uvek tačno 86 400 sekundi. Upravo je ta prostota izvor obeju njegovih osobenosti. S jedne strane, iz broja odmah sledi kalendarski datum i obratno, tako da svaki dnevnik događaja, svaka baza podataka i svaki sistem datoteka vode vreme baš njime. S druge, prestupna sekunda se u takvom brojanju uopšte ne može izraziti, što znači da ono, uprkos imenu, ne numeriše sekunde nego dane sa delovima, i zapravo je linearna funkcija zapisa UTC, a ne brojač proteklog vremena.
01 · Definicija
Unix vreme je broj sekundi koje su protekle od ponoći prvog januara 1970. godine koordiniranog svetskog vremena, pod uslovom da svaki dan sadrži tačno 86 400 sekundi. Zapis ISO 8601 isto to kazuje drugačije: kalendarskim datumom, dobom dana i navođenjem pomeraja od nultog meridijana, pri čemu polja teku strogo od krupnog ka sitnom.
Ograda o 86 400 sekundi nije sitnica, nego ono najbitnije u odredbi. Prestupnu sekundu, koju objavljuje služba obrtanja Zemlje, brojanje ne može da primi, i zato u trenutku umetanja sistem ili ponavlja jednu te istu vrednost dvaput, ili vraća sat unazad. Odatle sledi nešto važno: razlika dvaju unix brojeva nije broj sekundi koje su između dva događaja zaista protekle ako je među njih pala prestupna sekunda — odstupanje od atomske skale naraslo je već na dvadeset sedam sekundi.
Granica pak ne zavisi od odredbe, nego od širine čuvanja. Trideset dva bita sa znakom daju najveću vrednost 2 147 483 647, koja pada devetnaestog januara 2038; sledeći priraštaj prevodi najviši bit u jedinicu i čini broj negativnim, odbacujući sat u trinaesti decembar 1901. Šezdeset četiri bita pomeraju granicu za dvesta devedeset dve milijarde godina napred, ali cele nanosekunde u tim istim šezdeset četiri bita ističu već 2262.
Zapis po standardu rešava drugi zadatak — razmenu, a ne čuvanje — i zato u njemu teže stvari kojih broj uopšte nema: časovni pomeraj, razdvojnik između datuma i vremena i pravilo da se pri jednakoj dužini niza azbučni redosled poklapa sa vremenskim. Upravo je to poslednje svojstvo učinilo format osnovom razvrstavanja u imenima datoteka i u dnevnicima.
Vodite vreme klizačem i gledajte kako se registar puni: bitovi se pale zdesna nalevo, i dokle god najviši, onaj znaka, ostaje taman, broj je pozitivan a datum raste. Čim brojač pređe 2 147 483 647, najviši bit plane crveno, ceo broj postaje negativan, a sat skoči u 1901.
Zelena prava je atomska skala, gde je svaka sekunda zaista sekunda. Crvena stepenasta je Unix vreme, koje pri svakom umetanju izdaje jednu te istu oznaku dvaput, zbog čega linija zastane na mestu. Odstupanje iznosi već dvadeset sedam sekundi i raste, i zato brojanje valja za kalendarski datum, ali ne i za merenje trajanja u fizici.
02 · Pretvaranje
Unesite vremensku oznaku ili datum
Između svih umnožaka brojanja — sekundi, milisekundi, mikro- i nanosekundi — pretvaranja su tačna, pošto se razlikuju samo činiocem. Približan je jedan jedini red: pretvaranje u atomsku skalu zahteva da se zna koliko se prestupnih sekundi nakupilo do datog trenutka.
Razlaganje niza po standardu list čini u proširenom zapisu sa slovom Z; osnovni oblik bez razdvojnika iznet je u sitna podešavanja.
Problem 2038. godine ne leži u standardu, nego u sklopovima i u starom kodu: tridesetdvobitne oznake sede u programu brojila, u industrijskim upravljačima, u formatima sistema datoteka i u bazama podataka gde je polje već objavljeno sa četiri bajta. Promeniti tip u izvorima dovoljno je lako; proći kroz milione ugrađenih uređaja u preostalih dvanaest godina zadatak je iste vrste kao onaj koji je stajao pred 2000. godinom.
| Vrednost | Napomena | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Redovi veličina
logaritamska skala: od sekunde do granice šezdeset četiri bita04 · Merni instrumenti
Čime se događaj obeležava u vremenu
Poseban čip sa baterijom, koji vodi brojanje dok je uređaj ugašen. Čuva obično ne unix oznaku, nego polja kalendara zasebno, a širina njegovog polja godine njegova je sopstvena, tako da kod starih ploča razgovor o 2038. počinje pitanjem do koje godine broji sam čip.
Protokol NTP dovodi sat mašine na zajedničko vreme sa tačnošću od nekoliko milisekundi, i on sam upozorava na umetanje posebnom zastavicom dan ranije. Sopstvenu granicu ima takođe, i ona dolazi ranije: brojanje teče od 1900. u trideset dva bita bez znaka i prekoračiće u februaru 2036.
U dnevnik se oznaka piše ili brojem ili nizom po standardu, a drugo je bolje iz tačno jednog razloga: kod nizova jednake dužine azbučni redosled poklapa se sa vremenskim, pa se stavke razvrstavaju bez razlaganja datuma. Baš zato se format raširio daleko izvan računarske tehnike.
Spremnost uređaja za 2038. može se proveriti na jedan jedini način — pomeriti mu sat preko kobne granice i videti šta biva sa dnevnicima, sa uverenjima i sa računanjem intervala. Tako su već nađeni otkazi u obračunu, u sistemima nadzora pristupa i u rokovima važenja ključeva, gde se datum u budućnosti pravi sabiranjem i prekoračuje mnogo pre same granice.
05 · Pravila pisanja
Od krupnog ka sitnom, i uvek sa pomerajem
Standard traži opadajući redosled polja, četiri cifre godine, crticu kao razdvojnik datuma i slovo T pred vremenom; časovni pomeraj se navodi ili slovom Z za nulti meridijan, ili kao plus-minus sati i minuti. Unix oznaka se piše celim brojem bez razdvajanja redova, a umnožak se mora uvek navesti, pošto činilac hiljadu deli sekunde od milisekundi, a po veličini broja lako se mešaju.
Prvi zapis se u različitim zemljama čita različito i zato je u razmeni podataka nedopustiv. Drugi izostavlja i razdvojnik i pomeraj, tako da trenutak ostaje neodređen za dan na obe strane. Treći gubi vodeće nule, zbog čega nizovi prestaju da se razvrstavaju azbučno — a baš se zbog tog svojstva format i ceni. Četvrti izjednačuje unix brojanje sa atomskom skalom, dok među njima leži dvadeset sedam sekundi nakupljenih umetanja.
06 · Susedne jedinice
Pored stoje sva brojanja sazdana po istom načelu, ali od drugog početka: NTP vreme od 1900, julijanski datum od podneva 4713. godine pre naše ere, skala satelitskog sistema od januara 1980. Razlikuju se samo epohom i jedinicom, i zato se pretvaraju oduzimanjem konstante.
sekunde sa znakom
njegova granica pada već 2036.
prestupne sekunde pošteno prebrojane
Od listova Simetrijuma pored stoje julijanski datum, odakle je uzeta konstanta pretvaranja, skale UTC, TAI i UT1, koje objašnjavaju nestale prestupne sekunde, sekunda kao jedinica brojanja, i bit, čija širina granicu i određuje.
07 · Istorijski deo
Epoha izabrana iz nestašice bitova
U prvom priručniku Unixa vreme se brojalo u šezdesetinama sekunde od početka 1971. godine, a u trideset dva bita takvo brojanje obuhvatalo je jedva dobre dve godine. Isticale su tako brzo da bi epohu trebalo pomerati pri svakom izdanju sistema, pa se od delova sekunde odustalo u korist celih.
Prelaskom na cele sekunde tvorci su dobili zalihu od sto trideset šest godina i mogli su izabrati početak po udobnosti, a ne iz nužde. Uzet je prvi januar 1970 — najbliži okrugli datum u prošlosti, dokle mašinski zapisi ionako nisu dopirali — i otada nije promenjen nijednom, mada je sistem više puta iznova napisan iz temelja.
Međunarodna organizacija za standardizaciju svela je razilazeće nacionalne formate na jedan i u osnovu mu položila prosto pravilo: polja teku od krupnog ka sitnom, sva sa vodećim nulama. Uzgredna posledica pokazala se važnijom od zamisli — takvi se nizovi razvrstavaju kao brojevi, i format se raširio u imena datoteka, dnevnike i protokole razmene.
Stoni i serverski sistemi prešli su na šezdeset četiri bita odavno, i tamo je granica pomerena izvan svakog razumnog vidika. Opasnost je ostala drugde: u programu uređaja sa dvadesetogodišnjim vekom, u formatima datoteka gde je polje objavljeno sa četiri bajta, i u računanju budućih rokova, koji prekoračuju već danas čim se današnjem datumu doda petnaest godina.
Brojanje koje uprkos imenu ne broji sekunde
Odredba Unix vremena zvuči kao brojanje sekundi, ali zahtev za ravnih 86 400 sekundi u danu čini od nje nešto drugo: linearnu funkciju zapisa UTC, a ne meru proteklog vremena. Svaki put kad služba obrtanja Zemlje objavi umetanje, brojanje mora da ponovi jednu te istu vrednost dvaput ili da skoči unazad, a razlici dveju oznaka gubi se upravo ta sekunda. Za pola veka takvih se gubitaka nakupilo dvadeset sedam, i zato se u zadacima gde je potrebno pravo trajanje uzima atomska skala, a ne ova.
Druga osobenost ne leži uopšte u odredbi, nego u načinu čuvanja, i to je čini jedinom granicom u našem katalogu koju nije postavila ni priroda ni dogovor, nego širina mašinske reči. Julijanski datum ne završava se nikad, jer je broj; Unix vreme završava se devetnaestog januara 2038, jer je polje od četiri bajta. Razlika između veličine i njenog prikaza obično malo zaokuplja metrologe, a ovde upravo ona sve odlučuje.
Katalog · merne jedinice
List za svaku veličinu
Sedam osnovnih jedinica SI, dvadeset dve izvedene sa sopstvenim imenom i veličine van sistema, bez kojih ne bi radila ni tehnika ni kalendar.