Есть ли причина использовать дату (1 января 1970 г.) в качестве стандарта по умолчанию для управления временем? Я видел этот стандарт как в Java, так и в Python. Эти два языка мне известны. Существуют ли другие популярные языки, соответствующие тому же стандарту?
Пожалуйста, опишите.
java
python
programming-languages
Виджей Шанкер Дубей
источник
источник
Ответы:
Это стандарт времени Unix.
источник
Вопрос делает два ложных предположения:
Две дюжины эпох
Время в вычислениях не всегда отслеживается с начала 1970 UTC . Хотя ссылка на эту эпоху популярна, различные вычислительные среды на протяжении десятилетий использовали по крайней мере почти два десятка эпох . Некоторые из других веков. Они варьируются от 0 (нулевого) года до 2001 года.
Вот несколько.
Эпоха Unix Обычная, но не доминирующая
Начало 1970-х годов популярно, вероятно, из-за его использования в Unix. Но это ни в коем случае не доминирует. Например:
January 0, 1900
(31 декабря 1899 г.).1 January 2001, GMT
.January 6, 1980
то время как европейские альтернативных Galileo использования22 August 1999
.ISO 8601
Предполагая, что эпоха отсчета с тех пор используется, эпоха Unix открывает большую уязвимость для ошибок. Человек не может мгновенно расшифровать такой подсчет, поэтому ошибки или проблемы не будут легко отмечены при отладке и регистрации. Другой проблемой является неоднозначность детализации, описанная ниже.
Я настоятельно рекомендую вместо этого сериализовать значения даты и времени как недвусмысленные строки ISO 8601 для обмена данными, а не целочисленное значение count-Since-epoch:
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 января 1970 года, потому что - «1 января 1970 года», обычно называемое «датой эпохи», является датой начала времени для компьютеров Unix, и эта отметка времени помечена как «0». Любое время с этой даты рассчитывается на основе количества прошедших секунд. Проще говоря ... метка времени любой даты будет разницей в секундах между этой датой и «1 января 1970 года». Метка времени - это просто целое число, которое начинается с числа «0» в «полночь 1 января 1970 года» и продолжает увеличиваться. на «1» при каждом втором проходе. Для преобразования временных меток UNIX в удобочитаемые даты PHP и другие языки с открытым исходным кодом предоставляют встроенные функции.
источник
Нет причины, которая имеет значение.
time
Модуль Python - это библиотека C. Спросите Кена Томпсона, почему он выбрал эту дату для эпохальной даты. Может это был чей-то день рождения.В Excel используются две разные эпохи. Есть ли причина, по которой разные версии Excel используют разные даты?
За исключением настоящего программиста, никто никогда не узнает, почему были приняты такие решения.
А также...
Неважно, почему была выбрана дата. Просто было.
Астрономы используют свою эпохальную дату: http://en.wikipedia.org/wiki/Epoch_(astronomy)
Зачем? Чтобы математика работала, нужно выбрать дату. Подойдет любая случайная дата.
Дата в далеком прошлом избегает отрицательных чисел в общем случае.
Некоторые из более умных пакетов используют пролептический григорианский год 1. Какая причина почему год 1?
В таких книгах, как «Календарные вычисления», приводится причина: это немного проще математически.
Но если задуматься, разница между 1/1/1 и 01.01.1970 составляет всего 1969 год, тривиальное математическое смещение.
источник
1 января 1970 г. 00:00:00 - это нулевая точка времени POSIX .
источник
В) «Почему даты отсчитываются с 1 января 1970 года?»
A) Он должен был быть как можно более свежим, но при этом включать некоторое прошлое. Скорее всего, не было никакой другой существенной причины, поскольку многие люди думают так же.
Они знали, что это создает проблему, если помещают это слишком далеко в прошлое, и знали, что это дает отрицательные результаты, если это произойдет в будущем. Не было необходимости углубляться в прошлое, поскольку события, скорее всего, будут происходить в будущем.
Примечания: У индейцев майя, с другой стороны, была потребность поместить события в прошлое, поскольку они знали много прошлого, для чего они составили долгосрочный календарь. Просто занести в календарь все рутинные явления.
Отметка времени не была предназначена для календаря, это эпоха. И я считаю, что майя создали свой долгосрочный календарь, используя ту же точку зрения. (это означает, что они чертовски хорошо знали, что у них нет никаких отношений с прошлым, им просто нужно было увидеть его в большем масштабе)
источник
Да, клиент (и его семья). Именно здесь Java приняла это.
источник