Подтвердить что ты не робот

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

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

Опишите.

4b9b3361

Ответ 1

Это стандарт Unix time.

Время Unix или время POSIX - это система для описания точек во времени, определяемая как количество секунд, прошедших с полуночного пролепика "Скоординированное универсальное время" (UTC) от 1 января 1970 года, не считая секунд прыжка.

Ответ 2

Вопрос делает два ложных предположения:

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

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

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

Unix Epoch Common, но не доминирует

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

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

ISO 8601

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

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

Считается, что с эпохи

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

А...

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

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

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

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

Некоторые из более умных пакетов используют прорептический григорианский год 1. Любая причина, почему год 1?
Там есть причина, данная в книгах, таких как "Календарные вычисления": она математически немного проще.

Но если вы думаете об этом, разница между 1/1/1 и 1/1/1970 - это всего лишь 1969 год, тривиальное математическое смещение.

Ответ 5

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

Ответ 6

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

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

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

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

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

Ответ 7

Да, C (и его семейство). Здесь Java тоже принимал это.