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.
java
python
programming-languages
Vijay Shanker Dubey
źródło
źródło
Odpowiedzi:
Jest to standard czasu uniksowego.
źródło
Pytanie zawiera dwa fałszywe założenia:
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.
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:
January 0, 1900
(31 grudnia 1899).1 January 2001, GMT
.January 6, 1980
podczas gdy europejski alternatywny system Galileo wykorzystuje22 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.SSSZ
takie jak2014-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.
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.
Używane przez starsze biblioteki Java, w tym dołączoną klasę java.util.Date i bibliotekę Joda-Time .
Używane przez bazy danych, takie jak Postgres .
Używane przez nowy pakiet java.time w Javie 8.
źródło
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.
źródło
Nie ma powodu, który ma znaczenie.
time
Moduł 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.
źródło
1 stycznia 1970 00:00:00 jest punktem zerowym czasu POSIX .
źródło
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)
źródło
Tak, C (i jego rodzina). Tutaj też zajęła się tym Java.
źródło