Почему даты рассчитываются с 1 января 1970 года?
7 ответов
Это стандарт Unix времени.
Unix time, или POSIX time, это система для описания точек во времени, определяемая как количество секунд, прошедших с полуночного пролептического координированного универсального времени (UTC) 1 января 1970 года, не считая високосных секунд.
вопрос делает два ложных предположения:
- все отслеживание времени в вычислениях выполняется как count-since-1970.
- такое отслеживание является стандартным.
Две Дюжины Эпох
время в вычислениях не всегда отслеживается с начала 1970-х UTC. А эпохи популярно, различные вычислительные среды на протяжении десятилетий использовали по крайней мере почти два десятка эпохи. Некоторые из них из других веков. Они варьируются от 0 (нулевого) года до 2001 года.
вот несколько.
0 января 1 г. до н. э.
1 января, объявление 1
15 октября 1582,
1 января, 1601
31 декабря 1840
17 ноября 1858
30 декабря 1899
31 декабря 1899
1 января 1900 года
1 января 1904
31 декабря 1967
1 января
6 января 1980
1 января 2000
1 января 2001
Эпоха Unix Общая, Но Не Доминирующая
начало 1970 года популярно, вероятно, из-за его использования Unix. Но ни в коем случае не является доминирующим. Например:
- бесчисленные миллионы (миллиарды?) Microsoft Excel & Lotus Документы 1-2-3 использовать
January 0, 1900
(31 декабря 1899 г.). - мира более миллиарда устройств iOS / OS X С помощью какао (NSDate) эпоха of
1 January 2001, GMT
. - на GPS спутниковая навигационная система использует
January 6, 1980
в то время как европейская альтернатива Галилео использует22 August 1999
.
ISO 8601
если считать с эпохи через эпохи Unix открывает большой уязвимости жуки. Такое количество невозможно для человека мгновенно расшифровать, поэтому ошибки или проблемы не будут легко помечены при отладке и регистрации. Другой проблемой является неоднозначность детализации, о которой говорится ниже.
я настоятельно рекомендую вместо этого сериализовать значения даты и времени как однозначные ISO 8601 строки для обмена данными, а не целое число-с-эпохи:YYYY-MM-DDTHH:MM:SS.SSSZ
например 2014-10-14T16:32:41.018Z
.
Граф что С Эпоха!--15-->
еще одна проблема с отслеживанием времени count-since-epoch-это единица времени с по крайней мере четырьмя уровнями разрешения.
- секунд
оригинальные средства Unix использовали целые секунды, что привело к 2038 Год Проблема когда мы достигаем предела секунд с 1970 года, если хранится как 32-разрядное целое число. -
МС
используется старыми библиотеками Java, в том числе в комплекте java.утиль.класс Date и Joda Времени библиотека. -
микросекунд
используется базами данных, такими как Postgres. -
наносекунд
используется новый java.пакет времени в Java 8.
есть ли причина использовать дату (1 января 1970 года) в качестве стандарта для манипуляции временем?
нет причин, которые имеют значение.
в Python time
модуль и библиотека Си. Спросите Кена Томпсона, почему он выбрал эту дату для эпохальной даты. Может, у кого-то день рождения.
Excel использует две разные эпохи. Любая причина, почему разные версии excel используют разные даты?
за исключением фактических программист, больше никто никогда не узнает почему такие решения были приняты.
и...
не важно почему дата была выбрана. Просто было.
астрономы используют свою собственную эпохальную дату:http://en.wikipedia.org/wiki/Epoch_ (Астрономия)
почему? Дата должна быть выбрана, чтобы математика сработала. Любая случайная дата будет работать.
дата далеко в прошлом избегает отрицательных числа для общего случая.
поумнее некоторых пакетов использовать Григорианскому 1 год. Почему 1 год?
В таких книгах, как "календарные вычисления", есть причина: математически это немного проще.
но если вы подумаете об этом, разница между 1/1/1 и 1/1/1970-это просто 1969, тривиальное математическое смещение.
Почему его всегда 1 января 1970 года, потому что - "1 января 1970 года" обычно называют "датой эпохи" - это дата, когда время началось для компьютеров Unix, и эта метка времени помечена как "0". Любое время с этой даты рассчитывается на основе количества прошедших секунд. В простых словах... отметка времени любой даты будет разницей в секундах между этой датой и "1 января 1970 года" отметка времени - это просто целое число, которое начинается с числа " 0 " на "полночь 1 января 1970 года" и продолжается увеличение на " 1 " при каждом втором проходе для преобразования временных меток UNIX в читаемые даты PHP и другие языки с открытым исходным кодом предоставляют встроенные функции.