Почему даты рассчитываются с 1 января 1970 года? - PullRequest
64 голосов
/ 28 марта 2010

Есть ли причина для использования даты (1 января 1970 года) в качестве стандарта по умолчанию для манипуляции временем? Я видел этот стандарт в Java, а также в Python. Эти два языка мне известны. Существуют ли другие популярные языки, которые соответствуют тому же стандарту?

Пожалуйста, опишите.

Ответы [ 7 ]

48 голосов
/ 28 марта 2010

Это стандарт Время Unix.

Время Unix, или время POSIX, представляет собой систему для описания точек во времени, определяемых как количество секунд, прошедших с моментаПолуночное всемирное координированное время (UTC) от 1 января 1970 года, не считая високосных секунд.

44 голосов
/ 16 октября 2014

с использованием даты (1 января 1970 г.) в качестве стандарта по умолчанию

Вопрос состоит из двух ложных предположений:

  • Весь учет времени в вычислительной технике осуществляется с 1970 года.
  • Такое отслеживание является стандартным.

Две дюжины эпох

Время вычислений Не всегда отслеживается с начала 1970 UTC . В то время как эта эпоха популярна, в различных вычислительных средах за десятилетия использовалось по меньшей мере почти две дюжины эпох . Некоторые из других веков. Они варьируются от года 0 (ноль) до 2001 года.

Вот несколько.

января 0, 1 г. до н.э.

1 января, AD 1

15 октября 1582

1 января 1601

31 декабря 1840

17 ноября 1858

30 декабря 1899

31 декабря 1899

1 января 1900

1 января 1904

31 декабря 1967

1 января 1980

6 января 1980

1 января 2000

1 января 2001

Unix Epoch Common, но не доминирующая

Начало 1970-х популярно, вероятно, из-за его использования Unix. Но это ни в коем случае не является доминирующим. Например:

  • Бесчисленные миллионы (миллиарды?) Документов Microsoft Excel и Lotus 1-2-3 используют January 0, 1900 (31 декабря 1899 г.).
  • В мире сейчас есть более миллиарда устройств iOS / OS X с использованием эпохи Какао (NSDate) из 1 January 2001, GMT.
  • Спутниковая навигационная система GPS использует January 6, 1980, в то время как европейская альтернатива Galileo использует 22 August 1999.

ISO 8601

Если предположить, что эпоха count-Since-epoch использует эпоху Unix, это открывает большую уязвимость для ошибок. Такое количество невозможно для человека мгновенно расшифровать, поэтому ошибки или проблемы не будут легко помечены при отладке и ведении журнала. Другая проблема - это неоднозначность детализации, объясненная ниже.

Я настоятельно рекомендую вместо сериализации значений даты и времени использовать однозначные ISO 8601 строки для обмена данными, а не целое число с момента появления: YYYY-MM-DDTHH:MM:SS.SSSZ, например 2014-10-14T16:32:41.018Z.

Количество Что С эпохи

Еще одна проблема, связанная с отслеживанием времени с начала эпохи, связана с единицей времени, при которой обычно используется как минимум четыре уровня разрешения.

  • Секунды
    Оригинальные средства Unix использовали целые секунды, что привело к проблеме Год 2038 , когда мы достигли предела секунд с 1970 года, если хранить его как 32-разрядное целое число.
  • Миллисекунды
    Используется старыми библиотеками Java, включая встроенный класс java.util.Date и библиотеку Joda-Time .
  • Микросекунды
    Используется базами данных, такими как Postgres .
  • наносекунды
    Используется новым пакетом java.time в Java 8.

Diagram showing different software counting from epoch by seconds, milliseconds, microseconds, or nanoseconds.

5 голосов
/ 28 марта 2010

1 января 1970 г. 00:00:00 - нулевая точка POSIX time .

4 голосов
/ 28 марта 2010

Есть ли какая-либо причина, по которой дата (1 января 1970 года) является стандартом для манипуляции временем?

Нет причин, которые имеют значение.

Модуль Python time является библиотекой C. Спросите Кена Томпсона, почему он выбрал эту дату для эпохальной даты. Может быть, это был чей-то день рождения.

В Excel используются две разные эпохи. Любая причина, почему разные версии Excel используют разные даты?

За исключением настоящего программиста, никто больше никогда не узнает , почему были приняты такие решения.

И ...

Неважно , почему дата была выбрана. Это просто было.

Астрономы используют свою собственную эпохальную дату: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Почему? Дата должна быть выбрана, чтобы заставить математику работать. Любая случайная дата будет работать.

Дата в далеком прошлом позволяет избежать отрицательных чисел для общего случая.

В некоторых из более умных пакетов используется григорианский год 1-го года. Есть причина, по которой год 1?
В книгах, таких как «Календарные вычисления», есть причина: она математически немного проще.

Но если подумать, разница между 1/1/1 и 01.01.1970 составляет всего 1969 год, тривиальное математическое смещение.

3 голосов
/ 15 октября 2014

почему это всегда 1 января 1970 года, потому что - «1 января 1970», обычно называемое «датой эпохи», - это дата начала времени для компьютеров Unix, и эта отметка времени помечается как «0». Любое время с этой даты рассчитывается на основе количества прошедших секунд. Проще говоря ... отметка времени любой даты будет разницей в секундах между этой датой и «1 января 1970 года». Отметка времени - это просто целое число, которое начинается с числа «0» в «Полночь 1 января 1970 года» и продолжает увеличиваться на '1' при каждом втором проходе Для преобразования меток времени UNIX в читаемые даты PHP и другие языки с открытым исходным кодом предоставляют встроенные функции.

2 голосов
/ 21 апреля 2013

Q)"Почему даты рассчитаны с 1 января 1970 года?"

A) Это должно было быть как можно более новым, но включать некоторое прошлое. Скорее всего, не было другой существенной причины, так как многие люди думают так же.

Они знали, что это создаст проблему, если они поместили это слишком далеко в прошлое, и они знали, что это дало отрицательные результаты, если это было в будущем. Не было необходимости углубляться в прошлое, поскольку события, скорее всего, будут происходить в будущем.

Примечания: У майя, с другой стороны, была потребность поместить события в прошлое, так как они знали много прошлого, для которого они сделали долгосрочный календарь. Просто чтобы поместить все обычные явления в каландр.

Временная метка не подразумевалась как календарь, это эпоха. И я считаю, что майя сделали свой долгосрочный календарь, используя ту же точку зрения. (то есть они чертовски хорошо знали, что не имели никаких отношений с прошлым, им просто нужно было увидеть его в большем масштабе)

0 голосов
/ 28 марта 2010

Да, С (и его семья). Вот где Java тоже это взяла.

...