Dlaczego daty liczone są od 1 stycznia 1970?

99

Czy jest jakiś powód, by używać daty (1 stycznia 1970) jako domyślnego standardu do manipulacji czasem? Widziałem ten standard zarówno w Javie, jak iw Pythonie. Te dwa języki są mi znane. Czy są inne popularne języki zgodne z tym samym standardem?

Proszę opisz.

Vijay Shanker Dubey
źródło
1
Innym popularnym językiem stosującym ten sam standard jest PHP, jest to dość powszechny punkt początkowy.
Greg K

Odpowiedzi:

67

Jest to standard czasu uniksowego.

Czas uniksowy lub czas POSIX to system opisujący punkty w czasie, zdefiniowane jako liczba sekund, które upłynęły od północy proleptycznego skoordynowanego czasu uniwersalnego (UTC) 1 stycznia 1970 r., Nie licząc sekund przestępnych.

żołnierz. moth
źródło
5
Czy wiesz, czy Kernighan i Thompson podali powód, dla którego wybrali ten moment poza „Jest to okrągła liczba, zanim zaczęliśmy ją budować”?
dmckee --- kociak byłego moderatora
To początek roku, w zerowej strefie czasowej (Zulu). Oba sprawiają, że kod formatowania daty jest prostszy.
Donal Fellows
28
Nie liczy sekund przestępnych? Nie znałem tego szczegółu. Po kilku chwilach zastanowienia się nad tym rozumiem, dlaczego zrobiłeś to w ten sposób, ale stary. mój świat jest zrujnowany. o 24 sekundy.
keturn
70

przy użyciu daty (1 stycznia 1970) jako standardu domyślnego

Pytanie zawiera dwa fałszywe założenia:

  • Wszystkie obliczenia czasu w informatyce są liczone od 1970 roku.
  • Takie śledzenie jest standardowe.

Dwie tuziny epok

Czas w obliczeniach nie zawsze jest śledzony od początku 1970 UTC . Chociaż to odniesienie do epoki jest popularne, różne środowiska komputerowe na przestrzeni dziesięcioleci wykorzystywały co najmniej prawie dwa tuziny epok . Niektórzy pochodzą z innych stuleci. Wahają się od roku 0 (zero) do 2001.

Tu jest kilka.

0 stycznia 1 pne

1 stycznia AD 1

15 października 1582

1 stycznia 1601

31 grudnia 1840

17 listopada 1858

30 grudnia 1899

31 grudnia 1899

1 stycznia 1900

1 stycznia 1904

31 grudnia 1967

1 stycznia 1980

6 stycznia 1980

1 stycznia 2000

1 stycznia 2001

Epoka systemu Unix powszechna, ale nie dominująca

Początek 1970 roku jest popularny, prawdopodobnie ze względu na jego użycie przez Uniksa. Ale w żadnym wypadku nie jest to dominujące. Na przykład:

  • Niezliczone miliony (miliardy?) Dokumentów Microsoft Excel i Lotus 1-2-3 są używane January 0, 1900(31 grudnia 1899).
  • Świat ma teraz ponad miliard urządzeń iOS / OS X przy użyciu kakao (NSDate) epokę o 1 January 2001, GMT.
  • System nawigacji satelitarnej GPS wykorzystuje, January 6, 1980podczas gdy europejski alternatywny system Galileo wykorzystuje 22 August 1999.

ISO 8601

Zakładanie, że odliczanie od epoki korzysta z epoki Uniksa, otwiera dużą lukę w zabezpieczeniach błędów. Taka liczba jest niemożliwa do natychmiastowego odszyfrowania przez człowieka, więc błędy lub problemy nie będą łatwo oznaczane podczas debugowania i rejestrowania. Innym problemem jest niejednoznaczność szczegółowości wyjaśniona poniżej.

Zdecydowanie sugeruję, aby zamiast tego serializować wartości daty i godziny jako jednoznaczne ciągi ISO 8601 do wymiany danych, a nie jako liczbę całkowitą od epoki: YYYY-MM-DDTHH:MM:SS.SSSZtakie jak 2014-10-14T16:32:41.018Z.

Liczyć, co od epoki

Innym problemem związanym ze śledzeniem czasu zliczania od epoki jest jednostka czasu z co najmniej czterema powszechnie używanymi poziomami rozdzielczości.

  • Sekundy
    Oryginalne narzędzia uniksowe wykorzystywały całe sekundy, co doprowadziło do problemu z roku 2038, kiedy osiągnęliśmy limit sekund od 1970 r., Jeśli przechowywany jest jako 32-bitowa liczba całkowita.
  • Milisekundy
    Używane przez starsze biblioteki Java, w tym dołączoną klasę java.util.Date i bibliotekę Joda-Time .
  • Mikrosekundy
    Używane przez bazy danych, takie jak Postgres .
  • Nanosekundy
    Używane przez nowy pakiet java.time w Javie 8.

Diagram przedstawiający różne programy liczące od epoki w sekundach, milisekundach, mikrosekundach lub nanosekundach.

Basil Bourque
źródło
1
Zastanawiam się, jaka epoka dominuje w tej chwili ... czy oparliście to na danych?
PascalVKooten
1
@PascalVKooten Wiele różnych epok jest używanych w wielu różnych środowiskach i systemach oprogramowania. Nie ma więc jednej dominującej epoki. Chodzi mi tutaj o to, aby nigdy nie zakładać epoki. Poznaj swoje źródło danych. Najlepszym podejściem jest to, aby źródło danych całkowicie uniknęło problemu epoki i po prostu użyj ciągów ISO 8601, IMHO.
Basil Bourque
1
Dzięki za odpowiedź. Rozumiem, że jest ich wiele, ale jestem ciekawy, czy np. POSIX stał się z czasem bardziej popularny.
PascalVKooten
1
To interesujące i wszystko, ale nie wyjaśnia, dlaczego rok 1970 został wybrany jako epoka Uniksa.
Unknow0059
7

dlaczego zawsze jest to 1 stycznia 1970 r., Ponieważ - „1 stycznia 1970 r.” zwykle nazywany „datą epoki” jest datą rozpoczęcia czasu dla komputerów z systemem Unix, a ten znacznik czasu jest oznaczony jako „0”. Czas od tej daty jest obliczany na podstawie liczby sekund, które upłynęły. Mówiąc prościej ... znacznik czasu dowolnej daty będzie różnicą w sekundach między tą datą a „1 stycznia 1970 r.” Znacznik czasu to po prostu liczba całkowita, która zaczyna się od liczby „0” w dniu „Północ 1 stycznia 1970 r.” I rośnie. o „1” w każdym drugim przebiegu Do konwersji znaczników czasu UNIX na czytelne daty PHP i inne języki open source zapewniają wbudowane funkcje.

Friyank
źródło
Dlaczego daty liczone są od 1 stycznia 1970? Ponieważ daty są liczone od 1 stycznia 1970 roku. Jest to logika cyrkularna, która nic nie odpowiada.
Unknow0059
5

Czy jest jakiś powód, aby używać daty (1 stycznia 1970) jako standardu do manipulacji czasem?

Nie ma powodu, który ma znaczenie.

timeModuł Pythona to biblioteka C. Zapytaj Kena Thompsona, dlaczego wybrał tę datę na datę epokową. Może to były czyjeś urodziny.

Excel używa dwóch różnych epok. Czy jest jakiś powód, dla którego różne wersje programu Excel używają różnych dat?

Z wyjątkiem samego programisty, nikt inny nigdy nie dowie się, dlaczego podjęto takie decyzje.

I...

Nie ma znaczenia, dlaczego wybrano datę. Po prostu było.

Astronomowie używają własnej epokowej daty: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Czemu? Aby matematyka zadziałała, należy wybrać datę. Dowolna przypadkowa data będzie działać.

Data daleko w przeszłości pozwala uniknąć liczb ujemnych w ogólnym przypadku.

Niektóre z inteligentniejszych pakietów używają proleptycznego roku gregoriańskiego 1. Czy jest jakiś powód, dlaczego rok 1?
Jest powód podany w książkach takich jak Calendrical Calculations: jest to nieco prostsze matematycznie.

Ale jeśli się nad tym zastanowić, różnica między 01.01.11 a 01.01.1970 to zaledwie 1969 r., Trywialny matematyczny offset.

S.Lott
źródło
2
Gdyby wybrano 1/1/1, do tej pory zabrakło nam sekund (2 ^ 31). W obecnej sytuacji mamy do czynienia z problemem podobnym do roku 2000 w 2038 roku dla 32-bitowych systemów operacyjnych. en.wikipedia.org/wiki/Year_2038_problem
Chris Nava
1
@Chris Nava: Ludzie, którzy używają 1/1/1, liczą dni, a nie sekundy. 2 miliardy dni to około 5 milionów lat. Często trzymają parę (dzień, godzina), aby zmaksymalizować rozdzielczość czasową; w większości dni jest tylko 86400 sekund.
S.Lott,
@ S.Lott: Tak. Zwróciłem tylko uwagę, że ponieważ większość programów liczy sekundy (a nie minuty) od epoki, 1/1/1 był zbyt daleko w przeszłości, aby być rozsądną datą rozpoczęcia. Dlatego jako epokę komputerową wybrano nowszą datę (a przez skojarzenie początek rewolucji IT. ;-)
Chris Nava
@Chris Nava: "większość"? Zakładam, że przez „większość” masz na myśli „Linux”. Inne systemy operacyjne nie działają tak samo, jak Linux. Problem w tym, że „rozsądne” i „dlaczego 01.01.1970?” nie są łatwe pytania; co najważniejsze, odpowiedź nie ma znaczenia. „rozsądne” to prawda, ale to nie jest powód, dlaczego . Powód, dla którego może odpowiedzieć tylko Ken Thompson.
S.Lott
3

P) „Dlaczego daty są liczone od 1 stycznia 1970 r.?”

A) Musiało być jak najświeższe, ale zawierać trochę przeszłości. Najprawdopodobniej nie było innego znaczącego powodu, ponieważ wiele osób uważa to samo.

Wiedzieli, że stwarza problem, jeśli umieścili go zbyt daleko w przeszłości, i wiedzieli, że przyniesie negatywne skutki, jeśli nastąpi to w przyszłości. Nie było potrzeby zagłębiania się w przeszłość, ponieważ wydarzenia najprawdopodobniej będą miały miejsce w przyszłości.

Uwagi: Z drugiej strony Majowie musieli umieścić wydarzenia w przeszłości, ponieważ znali wiele przeszłości, dla których sporządzili długoterminowy kalendarz. Wystarczy umieścić w kalendarzu wszystkie rutynowe zjawiska.

Znacznik czasu nie był pomyślany jako kalendarz, jest to Epoka. I uważam, że Majowie stworzyli swój długoterminowy kalendarz, korzystając z tej samej perspektywy. (co oznacza, że ​​cholernie dobrze wiedzieli, że nie mają żadnych związków z przeszłością, po prostu musieli zobaczyć ją w większej skali)

Yezpahr
źródło
1

Tak, C (i jego rodzina). Tutaj też zajęła się tym Java.

Péter Török
źródło