Belső idő
Belsőleg, egy Unix rendszert tart fenn, amíg a másodpercek száma, mivel a Unix Epoch. A Unix Epoch volt éjfélkor január 1, 1970 UTC. A keleti Időzóna az Egyesült Államok volt december 31, 1969 at 19:00. Ahogy elkezdem ezt a cikket, az idő 1171733878. Én használ NTP (Network Time Protocol), hogy megtartsam a számítógép órája szinkronban. Tehát a pontos pillanatát, hogy a számítógépet azt hitte, 1171733878, valószínűleg ezért nem a tiéd. Minden gép kell értenie, hogy hány óra van. Nem számít, ahol időzóna számítógép lakik, vagy ahol időzóna van tartózkodnak. Ha valaki írt egy fájlba alatt a második, Unix volna elszámolni a módosítás időben 1171733878.
Unix-idő hagyományosan egy előjeles 32 bites egész. Ez azt jelenti, hogy a maximális idő 2147483647, amely a kelet-TimeZone az USA lenne január 18, 2038 at 22:14:07. A terv szerint e bővíteni a 64 bites egész addig. Unix másodperc számít elő egy-by-one. 1171733878 után, a következő pillanatban, hogy az én rendszer tudni a 1171733879. Egyszer ez szinkronizált, NTP működik lerövidítése vagy hosszabbító egy második. Tudok szerezni az időt, amelyben a rendszer rendelkezésre állási idő (). Szeretném, ha valami jobb, mint a második, a következő legpontosabb interfész az a rendszer hívás alkalommal (). times () legfőbb célja, hogy kapjunk szerkezete vonatkozó adatok a rendszer használatát. De a visszatérési értéke is hasznos ... ez az időt óra ketyeg. Óraütések kezdeni egy tetszőleges pont a múltban (gyakran az indítási idő), és előre, ha a kernel óra rutin fut. Hány óra ketyeg másodpercenként változhat. Hívhatsz sysconf (_SC_CLK_TCK), hogy megtudja, hogy az érték. A 100. közös értéke ezekben a napokban. 60 régebbi rendszereket használnak. 100 és 60 a két érték csak én láttam. Óraütések is visszatért egy aláírt egész. Tehát után egy évig a száma, majd visszaállíthatja nullára. Más, mint átütemezés, az óra ketyeg is előre egy-by-egy. (Clock kullancsok gyakran nevezik "jiffies" a Linux folks.) Van egy másik rendszer hívás gettimeofday (), amely visszaadja az idő, mivel a Unix Epoch másodpercek és mikroszekundum. gettimeofday () van szükség, hogy léteznek, és használja mikroszekundum pontossággal. Azonban a pontosság kifejezetten homályos. A mikroszekundum nem előre egy-by-egyet minden olyan rendszer, amit láttam. Feltételezem, hogy a Unix rendszerek meglehetősen jó a hundreths a második és talán még milliszekundum van bizonyos esetekben. De nem vállal azon túl, hogy a pontosságot.
Olvasható Timestamps
Most, hogy tudjuk, hogyan tartja a Unix-idő, térjünk rá egy másik Tárgy: How to display ideje, hogy a felhasználó számára. Kevés használók lesz boldog egy időbélyeg nem jelenik meg a 1171733878. Mivel én vagyok a keleti Időzóna az USA, szeretném látni ilyesmit 12:37:58 Február 17., 2007. De egy személy Los Angeles-i Kalifornia szeretne valami ilyesmi 9:37:58 Február 17., 2007. Írtam egy kicsit
perl script, hogy megjelenjen a formázott, amikor adott számot, mint a 1171733878. Itt a kimenetre kell megjelennie mind a keleti és csendes-óceáni időzóna néhány gondosan kiválasztott timestamps:
Eastern:
1173596399 Sun 2007-03-11 01:59:59 Standard Time
1173596400 Sun 2007-03-11 03:00:00 Nyári időszámítás
1173607199 Sun 2007-03-11 05:59:59 Nyári időszámítás
1173607200 Sun 2007-03-11 06:00:00 Nyári időszámítás
Csendes:
1173596399 Szo 2007-03-10 22:59:59 Standard Time
1173596400 Szo 2007-03-10 23:00:00 Standard Time
1173607199 Sun 2007-03-11 01:59:59 Standard Time
1173607200 Sun 2007-03-11 03:00:00 Nyári időszámítás
Figyeljük meg, hogy a belső Unix-idő nem változik kialakulását nyári időszámítás. Mi történik, hogy egy új szabályt hogyan jelenjen meg az idő lép hatályba. Annak érdekében, hogy a belső átalakítása idő egy időbélyeg, Unix tudnia kell, melyek időzónát használni. És tudni kell, ha a nyári időszámítás van érvényben. Vannak különböző szubrutinok, hogy lehet nevezni, hogy egy időbélyeg formátumban. Mindezek a végül igénybe tzset (), hogy meghatározzák az időzónát és az állam a nyári időszámítás. Tzset és ellenőrzi a TZ környezeti változó, hogy kitaláljuk, amit a felhasználó akar. Ha nem a TZ környezeti változó tzset () megyek valami hiba esetleg változó rendszerről rendszerre. A TZ környezeti változó gyakran beállítva valami ilyesmit EST5EDT4 ahogy azt használom. Ez azt mondja, hogy én vagyok az időzóna nevű EST, amely eltér a világidő 5 óra, nyári időszámítás idején nappal Időzóna nevezik EDT amely eltér a világidő 4 óra. Tudni, hogy mikor nyári időszámítás van érvényben, tzset fog kinézni az egyes adatfájl. Melyik fájl (és milyen formátumban van a fájl) között változik rendszerről rendszerre. A javítások állnak az idei nyári időszámítás változás kell valóban alig több, mint néhány kiigazítást ezeket a fájlokat.
Világidő
Amellett, hogy tudni a megfelelő időzónát, a Unix System kell tudni használni világidő (ami majdnem ugyanaz, mint a régi Greenwich Mean Time). Ez az, amit "date-u" teszi. A meghatározás az Universal Time is jól ismert, és nem jár nyári időszámítás változás. Az Universal Time meghatározás lehet építeni az időpontot rutinok használata helyett az adatállomány a tzset (). Ez igaz lehet akkor is, ha egy bejegyzés van jelen UTC. Levelező programok gyakran UTC timestamps.