Чому дати обчислюються з 1 січня 1970 року?


95

Чи існує якась причина використання дати (1 січня 1970 р.) Як стандартного стандарту для маніпулювання часом? Я бачив цей стандарт на Java, а також на Python. Ці дві мови я знаю. Чи існують інші популярні мови, які відповідають тому ж стандарту?

Будь ласка, опишіть.


1
Ще однією популярною мовою, що відповідає цьому ж стандарту, є PHP, це досить поширена точка відліку часу.
Greg K

Відповіді:


65

Це стандарт часу Unix.

Час Unix, або час POSIX, - це система опису моментів часу, що визначається як кількість секунд, що минули з півночі пролептичного уніфікованого універсального часу (UTC) з 1 січня 1970 року, не враховуючи високосних секунд.


5
Чи знаєте ви, чи всі Керніган і Томпсон висловлювали причину, що обрали цей момент, окрім "Це кругле число трохи раніше, ніж ми почали будувати цю річ"?
dmckee --- екс-модератор кошеня

Це початок року, він знаходиться в нульовому часовому поясі (зулу). Обидва вони спрощують код форматування дати.
Donal Fellows

28
Не рахує високосних секунд? Я не знав цієї деталі. Подумавши над цим кілька хвилин, я зрозумів, чому ти зробив би це так, але людина. мій світ зруйнований. на 24 секунди.
keturn

69

з використанням дати (1 січня 1970 р.) як стандартного стандарту

Питання робить два хибних припущення:

  • Весь відстеження часу в обчислювальних процесах здійснюється як відлік з 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 січня 1980 року

6 січня 1980 року

1 січня 2000 р

1 січня 2001 р

Поширена епоха Unix, але не домінуюча

Початок 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той час як європейська альтернатива використовує Galileo22 August 1999 .

ISO 8601

Якщо припустити, що використання епохи 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.

Діаграма, що відображає різний підрахунок програмного забезпечення від епохи до секунд, мілісекунд, мікросекунд або наносекунд.


1
Цікаво, якою є домінуюча епоха на даний момент ... ви базувались на даних?
PascalVKooten 02

1
@PascalVKooten Багато різних епох використовується у багатьох різних середовищах та програмних системах. Отже, немає жодної домінуючої епохи. Моя думка тут полягає в тому, щоб ніколи не передбачати епоху. Знай своє джерело даних. Найкращий підхід - для джерела даних повністю уникнути проблеми епохи та просто використовувати рядки ISO 8601, IMHO.
Василь Бурк

1
Спасибі за Вашу відповідь. Я розумію, що їх багато, але мені цікаво дізнатися, чи, наприклад, POSIX з часом став популярнішим.
PascalVKooten

7

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


5

Чи існує якась причина використання дати (1 січня 1970 р.) Як стандартної для маніпулювання часом?

Жодної причини, яка не має значення.

timeМодулем Python є бібліотека C. Запитайте Кена Томпсона, чому він обрав цю дату для епохальної дати. Можливо, це був день народження когось.

Excel використовує дві різні епохи. Будь-яка причина, чому різні версії Excel використовують різні дати?

За винятком власне програміста, ніхто інший ніколи не дізнається, чому були прийняті такі рішення.

І ...

Не має значення, чому було обрано дату. Це просто було.

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

Чому? Потрібно вибрати дату, щоб математика склалася. Будь-яка випадкова дата буде працювати.

Далеко в минулому дата уникає від’ємних цифр у загальному випадку.

Деякі розумніші пакети використовують пролептичний григоріанський рік 1. Будь-яка причина, чому рік 1?
У таких книгах, як Календарні розрахунки, є причина: вона математично дещо простіша.

Але якщо задуматися, різниця між 1/1/1 та 1/1/1970 складає лише 1969 рік, тривіальний математичний зсув.


1
Якби було вибрано 1/1/1, ми б вже не закінчили секунд (2 ^ 31). На даний момент ми стикаємося з проблемою, подібною до Y2K, у 2038 році для 32-розрядних операційних систем. en.wikipedia.org/wiki/Year_2038_problem
Кріс Нава

1
@Chris Nava: Люди, які використовують 1/1/1 рахують дні, а не секунди. 2 мільярди днів - це близько 5 мільйонів років. Часто вони тримають пару (день, час), щоб максимально дозволити час; у більшості днів є лише 86400 секунд.
S.Lott,

@ S.Lott: Так. Я лише вказував на те, що оскільки більшість програмного забезпечення відлічує секунди (а не хвилини) від епохи, 1/1/1 в минулому був розумною датою початку. Отже, комп’ютерною епохою було обрано більш пізню дату (і, за асоціацією, початок ІТ-революції. ;-)
Кріс Нава,

@Chris Nava: "найбільш"? Я припускаю, що під "більшістю" ви маєте на увазі "Linux". Інші ОС працюють не так, як працює Linux. Справа в тому, що "розумно" і "чому 1/1/1970?" непрості відповіді на запитання; головне, відповідь не має значення. «Розумний», правда, але це не причина , чому . Причина, чому це може відповісти лише Кен Томпсон.
S.Lott


2

Q) "Чому дати обчислюються з 1 січня 1970 року?"

А) Це повинно було бути якомога недавнішим, але включати деяке минуле. Швидше за все, жодної суттєвої іншої причини не було, оскільки багато людей почуваються так само.

Вони знали, що це створює проблему, якщо вони поміщають його занадто далеко в минуле, і вони знали, що це дасть негативні результати, якщо це буде в майбутньому. У минулому не було потреби заглиблюватися, оскільки події, швидше за все, відбуватимуться в майбутньому.

Примітки. З іншого боку, майям було потрібно помістити події в минуле, оскільки вони мали знання про багато минулого, для чого вони зробили довгостроковий календар. Просто щоб розмістити всі звичні явища на календарі.

Відмітка часу не була задумана як каландр, це Епоха. І я вірю, що майї зробили свій довгостроковий каландр, використовуючи ту саму перспективу. (мається на увазі, що вони чортово добре знали, що не мали ніяких стосунків з минулим, їм просто була необхідність бачити це в більшому масштабі)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.