Dlaczego czas uniksowy zaczyna się w 1970-01-01?

Odpowiedzi:

28

Nie znałbym odpowiedzi, gdyby nie wyszukiwarka Google:

Od Tutaj (wymaga bezpłatnej subskrypcji):

Linux podąża za tradycją ustaloną przez Unixa, polegającą na liczeniu czasu w sekundach od jego oficjalnych „urodzin” - nazywanych „epoką” w kategoriach obliczeniowych - czyli 1 stycznia 1970 roku.

Pełniejsze objaśnienie można znaleźć w tym artykule Wired News . Wyjaśnia, że ​​pierwsi inżynierowie uniksowi wybrali tę datę arbitralnie, ponieważ musieli ustalić jednolitą datę na początek czasu, a Nowy Rok 1970 był najwygodniejszy.

Hanan N.
źródło
5

Unix nie urodził się w 1970 roku.

Epoka unixowa przypada na północ 1 stycznia 1970 roku. Należy pamiętać, że nie są to „urodziny” Unixa - szorstkie wersje systemu operacyjnego istniały w latach sześćdziesiątych. Zamiast tego data została zaprogramowana w systemie na początku lat 70. tylko dlatego, że było to wygodne, według Dennisa Ritchiego, jednego z inżynierów, który pracował nad Unixem w Bell Labs od samego początku.

Danny A.
źródło
Wygodne wtedy, niewygodne dla programistów na całym świecie.
Chris Halcrow,
3
@ChrisHalcrow: co byś wybrał jako czas 0, gdybyś był DMR? A w jaki sposób wybór jest niewygodny dla programistów? Niedogodność polega na tym, że pomiar czasu w kategoriach „ludzkich” (lata, miesiące, dni, godziny / minuty / sekundy, strefy czasowe, czas letni) jest skomplikowany, a nie dlatego, że wybrano niektóre (dowolne) $ t = 0 $ instant.
NickD
@NickD, dobry monit o wyjaśnienie i dobry punkt! Wybrałbym 00:00:00 CE 0, ponieważ jestem pewien, że to ułatwi trochę obliczenia. Proszę wyjaśnić, co to jest „dmr”? Jak na ironię fakt, że PO wymaga wyjaśnienia, dlaczego wybrano tę datę, pokazuje, że zrozumienie użycia 01/01/70 jako daty odniesienia jest z natury mylące!
Chris Halcrow
2
@ChrisHalcrow: dmr = Dennis Ritchie. Czy obliczyłeś liczbę sekund od wybranego miejsca do dzisiaj? Ile bitów wymaga? PDP-11 miał 16-bitowe rejestry i słowa, ale pozwoliło ci zgrupować dwa rejestry i dwa słowa, aby utworzyć 32-bitowe rejestry i podwójne słowa dla niektórych operacji. To daje ci +/- 68 lat od twojego 0 czasu (lub +136 lat, jeśli twój czas był niepodpisany - ale dmr wybrał podpisany). Jego wybór może być nieco tajemniczy, kiedy go zobaczysz po raz pierwszy, ale jest to dość oczywista decyzja, biorąc pod uwagę powyższe ...
NickD
1
@NickD - świetne wyjaśnienie! To powinna być część zaakceptowanej odpowiedzi - dlaczego nie przenieść tam swojego komentarza, a my możemy usunąć nasz tutaj?
Chris Halcrow,
1

Podoba mi się pytanie :-)

Pozwól, że spróbuję na nie odpowiedzieć (źródło źródła: internet)

Czas uniksowy jest reprezentowany przez 32-bitową liczbę całkowitą (liczbę całkowitą), która może być dodatnia lub ujemna (podpisana). Unix został pierwotnie opracowany w latach 60. i 70. więc „początek” czasu uniksowego został ustawiony na 1 stycznia 1970 r. O północy czasu GMT (Greenwich Mean Time) - tej dacie / godzinie przypisano wartość czasu uniksowego równą 0. To jest to, co wiemy jako Epoka Uniksa.

32-bitowa liczba całkowita ze znakiem może reprezentować liczby całkowite od -2147483648 do 2147483647. Ponieważ czas uniksowy zaczyna się od 0, ujemne wartości czasu uniksowego cofają się w czasie od epoki, a liczby dodatnie idą w przód. Oznacza to, że czas uniksowy rozciąga się od wartości czasu uniksowego -2147483648 lub 20:45:52 GMT w dniu 13 grudnia 1901 r. Do wartości czasu uniksowego w wysokości 2147483647 lub 3:14:07 GMT w dniu 19 stycznia 2038 r. Daty te oznaczają początek, czas prehistoria i koniec czasu uniksowego.

Koniec czasu uniksowego nastąpi 19 stycznia 2038 03:14:07 GMT. 19 stycznia 2038 03:14:08 GMT przepełnią się wszystkie komputery, które nadal używają 32-bitowego czasu uniksowego. Jest to znane jako „problem z roku 2038”. Niektórzy uważają, że będzie to poważniejszy problem niż „problem roku 2000”. Rozwiązaniem problemu roku 2038 jest przechowywanie czasu uniksowego w 64-bitowej liczbie całkowitej. Jest to już realizowane w większości 64-bitowych systemów operacyjnych, ale wiele systemów może nie zostać zaktualizowanych do 2038 r.

Nikhil Mulley
źródło
5
Tylko jeden akapit tego w rzeczywistości odnosi się do pytania, które jest nieco niedokładne (epoka pierwotnie miała miejsce w 1971 r .; została przeniesiona później)
Michał Mrożek
1
Zobacz także en.wikipedia.org/wiki/Unix_time
Nikhil Mulley
1
To prawda Michael. Z Wikipedii: Najwcześniejsze wersje czasu uniksowego miały 32-bitową liczbę całkowitą narastającą z częstotliwością 60 Hz, co było szybkością zegara systemowego na sprzęcie wczesnych systemów uniksowych. W rezultacie wartość 60 Hz nadal pojawia się w niektórych interfejsach oprogramowania. Epoka również różniła się od bieżącej wartości. Pierwsze wydanie Podręcznika programisty Unix z dnia 3 listopada 1971 r. Definiuje czas uniksowy jako „czas od 00:00:00, 1 stycznia 1971 r., Mierzony w sześćdziesiątych sekundy”.
Nikhil Mulley,
@Nikhil Nadal nie rozumiem dlaczego 1970, tylko dlatego, że Unix został opracowany w tym czasie? Dlaczego nie 1960? czy inny miesiąc inny dzień?
Templariusz,
@Nikhil czy to nie ma znaczenia? Pierwszy dzień pierwszego miesiąca wygląda lepiej, a powstał w 1971 roku, więc 1970 też wyglądałby lepiej?
Templariusz,