Что такое unix время
Заблуждения программистов о Unix-времени
Вчера Дэнни поинтересовался любопытными фактами о Unix-времени, а я вспомнил, что иногда оно работает совершенно неинтуитивно.
Вот эти три факта кажутся в высшей степени разумными и логичными, не так ли?
Настольные часы 1770-х годов. Собрано Джоном Леру. Из коллекции Wellcome. Опубликовано под лицензией CC BY
У всех трёх заблуждений одна причина: високосные секунды. Если вы не знакомы с дополнительными секундами, вот краткая справка:
Время UTC определяется двумя факторами:
Когда два времени выпадают из синхрона, в UTC добавляется или удаляется секунда, чтобы вернуть синхронизацию. С 1972 года служба IERS (которая управляет этим делом) добавила 27 дополнительных секунд. В результате получилось 27 суток UTC продолжительностью в 86 401 секунду. Теоретически возможно появление суток продолжительностью 86 399 секунд (минус одна). Оба варианта противоречат фундаментальному предположению о Unix-времени.
Время Unix предполагает, что каждый день длится ровно 86 400 секунд (60 × 60 × 24 = 86 400), без всяких дополнительных секунд. Если происходит такой скачок, то время Unix либо перепрыгивает через секунду, либо отсчитывая две секунды за одну. По состоянию на 2019 год в нём отсутствует 27 високосных секунд.
Так что наши заблуждения нужно дополнить следующим образом:
До сих пор на практике секунды никогда не удалялись (и замедление вращения Земли означает, что это маловероятно), но если бы это когда-либо произошло, это означало бы, что день UTC стал на одну секунду короче. В этом случае последняя секунда UTC (23:59:59) отбрасывается.
В каждых сутках Unix одинаковое количество секунд, поэтому последняя Unix-секунда укороченного дня не будет соответствовать никакому времени UTC. Вот как это выглядит, в интервалах по четверти секунды:
Это уже 27 раз произошло на практике. По окончании суток UTC добавляют дополнительную секунду 23:59:60. В сутках Unix одинаковое количество секунд, поэтому он не может добавить дополнительную секунду — вместо этого приходится повторять метки времени Unix для последней секунды. Вот как это выглядит, в интервалах по четверти секунды:
Если стартовать в 23:59:60.50 и подождать полсекунды, время Unix возвращается на полсекунды, а метка времени Unix 101 соответствует двум секундам UTC.
Вероятно, это не единственные странности времени Unix — только то, что я вчера вспомнил.
UNIX-время
UNIX-время (англ. Unix time ) или POSIX-время — система описания моментов во времени, принятая в UNIX и других POSIX-совместимых операционных системах. Определяется как количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг); время с этого момента называют «эрой UNIX» (англ. Unix Epoch ).
Время UNIX согласуется с UTC — в частности, при объявлении високосных секунд UTC соответствующие номера секунд повторяются, то есть високосные секунды не учитываются.
Представление времени в виде количества секунд удобно использовать для сравнения и хранения дат (дата и время в этом формате занимают всего 4 или 8 байтов). При необходимости обращения к элементам дат (день, месяц, год) секунды можно преобразовать в любой подходящий формат (и наоборот), но если такие преобразования выполняются часто, они снижают производительность.
В программах для хранения UNIX-времени используется целочисленный знаковый тип. Знаковость упрощает вычисление разницы в секундах между двумя моментами времени, которая может быть отрицательной. 32-битные числа со знаком могут ссылаться на моменты времени от 1901-12-13 20:45:52 до 2038-01-19 03:14:07 включительно.
«Юбилейные» значения
Время | Количество секунд |
---|---|
9 сентября 2001 года, 01:46:40 UTC | 1 000 000 000 (1 гигасекунда) |
10 января 2004 года, 13:37:04 UTC | 1 073 741 824=2 30 (1 гибисекунда) |
18 марта 2005 года, 01:58:31 UTC | 1 111 111 111 |
13 февраля 2009 года, 23:31:30 UTC | 1 234 567 890 |
Проблема 2038
См. также
Полезное
Смотреть что такое «UNIX-время» в других словарях:
Время (UNIX) — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
Время UNIX — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
Unix time — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
UNIX time — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
UNIX timestamp — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
Unix timestamp — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
Время (ЮНИКС) — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
Время (Юникс) — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
Время POSIX — Эта статья о формате кодирования времени; об утилите см.: time (Unix). UNIX время или POSIX время (англ. Unix time) способ кодирования времени, принятый в POSIX совместимых операционных системах. Моментом начала отсчёта считается полночь (по… … Википедия
Время (значения) — Текущее время: 14:37 UTC. Время: В Викисловаре есть статья «время» Время одно из основных понятий физики и философии … Википедия
Unix time конвертер (Конвертер времени Unix онлайн)
Обычная дата(Human readable time) | Секунды |
1 минута | 60 секунд |
1 час | 3600 секунд |
1 день | 86400 секунд |
1 неделя | 604800 секунд |
1 месяц (30.44 дней) | 2629743 секунд |
1 год (365.24 дней) | 31556926 секунд |
Конвертивание эпохи Unix в человекопонятную дату(human readable date)
Unix дата начала и конца года, месяца или дня
Перевод секунд в дни, часы и минуты
Как получить Unix время в.
Конвертирование даты в Unix время в.
Конвертирование Unix времеми в понятную дату(human readable date).
Для чего нужен инструмент «Unixtime конвертер»?
Данный инструмент, в первую очередь, будет полезен веб-мастерам, которые постоянно имеют дело с большими объемами дат или часто в своей работе обращаются к их элементам. С помощью инструмента «Unixtime конвертер» можно легко конвертировать Unix время в понятную для пользователя дату (и наоборот), узнать текущее Unix epoch время, а также получить Unix время в различных языках программирования, СУБД и операционных системах.
Что такое Unix время?
Эра Unix (Unix epoch) началась в ночь с 31 декабря 1969 года на 1 января 1970 года. Именно эту дату взяли за точку отсчета «компьютерного» времени, которое исчисляется в секундах и занимает очень мало места на диске – всего 4 или 8 байт. С помощью такого способа кодирования программисты могут «спрятать» любую дату в одно число, и легко конвертировать его обратно в понятный пользователям формат.
Unix время (еще его называют Unix time или POSIX time) удобно использовать в различных операционных системах и языках программирования, так как оно отображается в виде одной величины, а не определенного количества полей, занимающих место. К тому же, UNIX time полностью соответствует стандарту UTC (в том числе и в високосных годах) – в таком случае соответствующие значения секунд просто повторяются.
Пару слов о терминах.
Итак, Unix-временем (или POSIX-временем) считается количество секунд, которые прошли с полуночи 1 января 1970 года до настоящего времени.
Unix Timestamp (временная метка) – это «зафиксированное» время, иными словами – конкретная дата, запечатленная в числе.
UTC (Universal Coordinated Time) – это Всемирное координированное время, которое «фиксируется» на нулевом меридиане, и от которого ведется отсчет географических часовых поясов.
Насколько «долговечна» данная система?
Всего лишь через пару десятков лет, а именно 19 января 2038 года в 03:14:08 по UTC Unix time достигнет значения 2147483648, и компьютерные системы могут интерпретировать это число как отрицательное. Ключ к решению данной проблемы лежит в использовании 64-битной (вместо 32-битной) переменной для хранения времени. В таком случае, запаса числовых значений Unix time хватит человечеству еще на 292 миллиарда лет. Неплохо, правда?
Unix время – одно для всех
Если вы живете в Лондоне или Сан-Франциско, а ваши друзья – в Москве, то «сверить часы» можно по Unix time: эта система в данный момент времени едина для всего мира. Естественно, если время на серверах выставлено правильно. А с помощью инструмента «Unixtime конвертер» такая конвертация займет у вас доли секунды.
Что такое время Unix и когда была эта эпоха?
Время Unix – это система, которую компьютеры используют для измерения времени. Но как работает это время и что такое «эпоха Unix»?
Почему в Unix есть собственное понятие времени? Какая эпоха и в чем проблема Y2038?
Время Unix – это средство представления определенной даты и времени, используемое Linux, macOS и многими другими совместимыми системами. Он настолько распространен, что вы, вероятно, используете его, даже не подозревая об этом. Однако, как только вы поймете время Unix, вы заметите его во многих контекстах, а несколько предоставленных нами инструментов, могут помочь вам в работе со временем Unix.
Какова цель Unix Time?
Время Unix – это количество секунд, прошедших с фиксированной даты и времени. Это формат даты / времени (или отметки времени), который отличается от привычных нам удобочитаемых дат и времени. Это чисто из соображений эффективности. Для хранения одного числа, представляющего секунды, требуется намного меньше места, чем для хранения отдельных значений года, месяца, часа и т. д.
Конечно, говоря современным языком, разница в пространстве не так уж и велика. Но учтите, что Unix возник в конце 1960-х, когда доступное хранилище было намного меньше. Также часто используются временные метки, поэтому их хранилище увеличивается. Например, с каждым файлом связаны три метки времени.
Формат практически невозможно перевести в уме, если вы не гений математики. Но он по-прежнему имеет некоторые преимущества перед более читаемыми альтернативами, такими как среда, 21 октября 2015 г., 07:28:00 по Гринвичу. Вы можете легко и быстро заказать две метки времени Unix. Также обычно быстрее определить разницу между двумя отметками времени. Это особенно верно для дат, близких друг к другу, например, в соседние дни.
Об эпохе
Итак, время Unix – это общее количество секунд с определенного момента времени. Но что это за момент времени? Это 00:00:00 UTC на 1 января 1970 года. Это часто называют эпохой Unix. Программисты выбрали эту дату для эпохи из соображений удобства, поскольку это была ближайшая круглая дата, когда они изобрели время Unix.
Возможно, вы видели эту дату, когда что-то пошло не так. Это явно ошибка, но она выглядит очень странно, когда она приводит к дате до того времени, когда многие из нас родились! Впрочем, это вполне понятно, если знать о времени Unix. Если какая-либо система пытается отобразить метку времени, которая не имеет никакого значения, она часто преобразуется в 0 и приводит к точной дате эпохи.
Формат данных времени Unix
Собственно говоря, его нет. Исходный тип данных был 32-битным целым числом, и это часто остается так, даже в гораздо более мощных системах.
Этот тип данных позволяет значению хранить в общей сложности 2^32 (2 в 32-ой степени) секунды, что составляет чуть более 136 лет. Это значение обычно подписано, что означает, что оно может быть отрицательным или положительным. Таким образом, обычно это 68 лет по обе стороны от эпохи, то есть с 1902 по 2038 годы.
Конечно, это еще ограниченный период. Но в первую очередь формат временной метки использовался для таких понятий, как модификация файлов. Очень важно было представить время, близкое к настоящему, а не древнюю историю или далекое будущее. Даже для таких приложений, как календари, редко требуется представлять даты более чем на несколько десятилетий в будущем.
Но это не значит, что в этом ограниченном промежутке времени нет проблем…
Проблема 2038 года
Ошибка 2000 года, одна из худших ошибок программирования в истории, затронула компьютерные системы, которые хранят годы в виде двузначных значений. Когда наступил 2000 год, такие системы относились к нему так, как будто это был 1900 год. В действительности это было не так катастрофично, как предполагалось, главным образом потому, что многие люди заранее потратили много времени и усилий, готовясь к нему.
Если бы вы обратили внимание на предыдущий раздел, вы могли бы заметить аналогичную проблему, которая может повлиять на время Unix. Что ж, у Unix time есть собственная проблема с данными: проблема Y2k38. (Это часто называют проблемой, а не ошибкой; возможно, мы стали более оптимистичными с 2000 года!) Когда время Unix буквально истечет в 2038 году, системы будут рассматривать новые даты как 1902 или 1970.
По крайней мере, эта проблема нас не коснется ровно в полночь под Новый год. Последняя секунда 32-битного времени Unix приходится на 19 марта. В конечном итоге мы, скорее всего, модернизируем большинство систем к 2038 году, или к тому времени они все равно устареют.
Некоторые полезные ресурсы по меткам времени
Сайт Epoch Converter, возможно, является наиболее полным доступным конвертером временных меток. Он начинается с отображения текущего времени Unix – в реальном времени – и добавляет к этому почти все мыслимые функции. Его основное использование – для преобразования между отметками времени и датами, удобочитаемыми человеком, в обоих направлениях.
Dan’s Tools – это огромная коллекция полезных веб-приложений, одно из которых – конвертер временных меток, он более прост в использовании.
Time.is представляет еще один, еще более минималистичный вид. Он показывает время в нескольких форматах, включая время Unix. Он включает в себя текущее время в заголовке страницы, что полезно.
Использование Unix Time с инструментами командной строки
В Linux и macOS программа даты является основной утилитой для работы с датой и временем, включая временные метки Unix. Вызывается без каких-либо аргументов, возвращает текущую дату / время в удобочитаемом формате:
Если вам нужна текущая дата / время во времени Unix, используйте аргумент +% s :
Вы можете преобразовать дату, удобочитаемую человеком, в метку времени, используя флаг -d, если ваша версия даты поддерживает его. Большинство версий Linux по умолчанию должны:
В macOS дата – это другая программа, для которой требуется другой набор флагов:
Идя в другом направлении, вы можете преобразовать временную метку Unix, используя флаг -r:
Некоторые другие программы используют формат %s для работы со временем Unix. Например, если вы хотите показать дату изменения файла во времени Unix, с версией ls для Linux, вы можете использовать следующее:
Как использовать Unix Time в языках программирования
В PHP есть функция time(), которая возвращает текущую временную метку Unix. Его функция date() принимает метку времени в качестве второго аргумента:
JavaScript подходит к вещам интересным образом. У него есть метод Date.now() для получения количества миллисекунд с эпохи Unix. Конечно, вы можете разделить это на 1000 и округлить результат, чтобы получить эквивалентное время Unix в секундах:
Понимание времени Unix
Такие понятия, как эпоха и временные метки, являются важной частью начала работы с Linux. Время Unix – это простая концепция, которая возникает во многих местах. Как только вы это поймете, вы можете найти его весьма полезным, например, при вычислении разницы во времени. Вы также можете распознать, когда это может быть причиной определенных ошибок.
Содержание
Определение
Время Unix составляет два уровня кодирования. Первый уровень кодирует момент времени как скаляр настоящий номер который представляет количество секунд, прошедших с 00:00:00 UTC, четверг, 1 января 1970 г. [6] Второй уровень кодирует это число как последовательность битов или десятичных цифр.
Как и в стандарте UTC, в этой статье дни помечаются с помощью Григорианский календарь, и считает время в течение каждого дня в часах, минутах и секундах. Некоторые примеры также показывают Международное атомное время (TAI), другая временная схема, которая использует те же секунды и отображается в том же формате, что и UTC, но в которой каждый день точно соответствует 86 400 секунд, постепенно теряя синхронизация со скоростью вращения Земли примерно одну секунду в год.
Кодирование времени в виде числа
В Unix эпоха это время 00:00:00 UTC 1 января 1970 г. [2] Есть проблема с этим определением, поскольку UTC не существовало в его нынешней форме до 1972 года; этот вопрос обсуждается ниже. Для краткости в оставшейся части этого раздела используется ISO 8601 формат даты и времени, в котором эпоха Unix 1970-01-01T00: 00: 00Z.
Високосные секунды
Вышеупомянутая схема означает, что в обычный день UTC, который имеет продолжительность 86 400 секунд, временное число Unix изменяется в непрерывный образ через полночь. Например, в конце дня, использованном в приведенных выше примерах, представления времени изменяются следующим образом:
Когда второй прыжок происходит, день UTC не совсем 86 400 секунд и временное число Unix (которое всегда увеличивается ровно на 86 400 каждый день) испытывает прерывность. Високосные секунды могут быть положительными или отрицательными. Никакая отрицательная дополнительная секунда никогда не объявлялась, но если бы она была, то в конце дня с отрицательной дополнительной секундой время Unix подскочило бы на 1 до начала следующего дня. Во время положительной дополнительной секунды в конце дня, которая происходит в среднем примерно каждые полтора года, временное число Unix непрерывно увеличивается до следующего дня в течение секунды координации, а затем в конце секунды координации возвращается на 1. (возвращаясь к началу следующего дня). Например, вот что произошло в системах, строго соответствующих POSIX.1, в конце 1998 года:
Числа времени Unix повторяются в секундах сразу после положительной дополнительной секунды. Число времени Unix 1 483 142 400 поэтому неоднозначен: он может относиться либо к началу дополнительной секунды (2016-12-31 23:59:60), либо к ее концу, на секунду позже (2017-01-01 00:00:00). В теоретическом случае, когда возникает отрицательная дополнительная секунда, двусмысленности не возникает, но вместо этого существует диапазон временных чисел Unix, которые вообще не относятся к какой-либо точке времени UTC.
Часы Unix часто реализуются с другим типом положительной обработки секунды координации, связанной с Сетевой протокол времени (NTP). В результате получается система, не соответствующая стандарту POSIX. См. Подробности в разделе ниже, посвященном NTP.
При работе с периодами, которые не охватывают дополнительную секунду UTC, разница между двумя временными числами Unix равна продолжительности в секундах периода между соответствующими моментами времени. Это обычная вычислительная техника. Однако там, где встречаются дополнительные секунды, такие вычисления дают неверный ответ. В приложениях, где требуется такой уровень точности, необходимо обращаться к таблице дополнительных секунд при работе с временем Unix, и часто предпочтительнее использовать другое кодирование времени, которое не страдает от этой проблемы.
Вариант на основе несинхронного сетевого времени
Обычно МиллсЧасы Unix-стиля реализованы с обработкой секунды координации, не синхронной с изменением числа времени Unix. Число времени сначала уменьшается там, где должен был произойти прыжок, а затем он переходит к правильному времени через 1 секунду после прыжка. Это упрощает реализацию и описано в статье Миллса. [10] Вот что происходит при положительной дополнительной секунде:
Это можно правильно декодировать, обратив внимание на переменную состояния секунды координации, которая однозначно указывает, был ли прыжок уже выполнен. Изменение переменной состояния синхронно с прыжком.
Аналогичная ситуация возникает с отрицательной дополнительной секундой, когда пропущенная секунда немного опаздывает. Очень кратко система показывает номинально невозможное временное число, но это можно определить по TIME_DEL состояние и исправлено.
В системах этого типа число времени Unix нарушает POSIX в отношении обоих типов дополнительных секунд. Сбор переменной состояния секунды координации вместе с числом времени позволяет однозначно декодировать, поэтому при желании можно сгенерировать правильное временное число POSIX или сохранить полное время UTC в более подходящем формате.
Логика декодирования, необходимая для работы с этим стилем часов Unix, также могла бы правильно декодировать гипотетические POSIX-совместимые часы с использованием того же интерфейса. Этого можно добиться, указав TIME_INS состояние в течение всей вставленной секунды координации, затем указывает ВРЕМЯ ЖДЕТ в течение всей следующей секунды, повторяя отсчет секунд. Это требует синхронной обработки секунды координации. Это, вероятно, лучший способ выразить время в формате UTC в форме часов Unix через интерфейс Unix, когда базовые часы принципиально не подвержены влиянию дополнительных секунд.
Вариант на основе TAI
Другой, гораздо более редкий и несовместимый вариант хронометража Unix включает в себя кодирование TAI, а не UTC; некоторые системы Linux настроены таким образом. [11] Поскольку TAI не имеет дополнительных секунд, а каждый день TAI длится ровно 86400 секунд, эта кодировка фактически представляет собой чистый линейный счетчик секунд, прошедших с 1970-01-01T00: 00: 00 TAI. Это значительно упрощает арифметику временных интервалов. Значения времени из этих систем не страдают двусмысленностью, которую имеют строго соответствующие системы POSIX или системы, управляемые NTP.
В этих системах необходимо обращаться к таблице дополнительных секунд для правильного преобразования между UTC и представлением псевдо-Unix-времени. Это похоже на то, как нужно обращаться к таблицам часовых поясов для преобразования в и из гражданское время; то База данных часовых поясов IANA включает информацию о секундах координации, а пример кода, доступный из того же источника, использует эту информацию для преобразования между отметками времени на основе TAI и местным временем. Преобразование также столкнулось с проблемами определения до начала 1972 года текущей формы UTC (см. Основание UTC ниже).
Представляя число
Временное число Unix может быть представлено в любой форме, способной представлять числа. В некоторых приложениях число просто представлено в текстовом виде в виде строки десятичных цифр, что вызывает лишь тривиальные дополнительные проблемы. Однако некоторые двоичные представления времен Unix особенно важны.
В некоторых новых операционных системах time_t был расширен до 64 бит. Это увеличивает представимое время примерно на 293 миллиарда лет в обоих направлениях, что более чем в двадцать раз превышает нынешнее время. возраст вселенной по направлению.
В POSIX и Открытая группа Спецификации Unix включают Стандартная библиотека C, который включает типы времени и функции, определенные в заголовочный файл. Стандарт ISO C гласит, что time_t должен быть арифметическим типом, но не требует для него какого-либо конкретного типа или кодировки. POSIX требует time_t быть целочисленным типом, но не требует, чтобы он был подписанным или беззнаковым.
Основание UTC
Текущая форма UTC с дополнительными секундами определяется только начиная с 1 января 1972 года. До этого, с 1 января 1961 года, существовала более старая форма UTC, в которой не только были случайные временные шаги, которые были нецелыми числами. числа секунд, но также и секунда UTC была немного длиннее секунды SI и периодически изменялась, чтобы непрерывно приближаться к вращению Земли. До 1961 г. не было UTC, а до 1958 г. не было широко распространенных атомный хронометраж; в эти эпохи некоторое приближение время по Гринвичу (основанный непосредственно на вращении Земли) вместо атомной шкалы времени. [ нужна цитата ]
Значение значений времени Unix ниже +63 072 000 (т.е. до 1 января 1972 г.) точно не определено. В основе таких времен Unix лучше всего понимать неуказанное приближение к UTC. В компьютерах той эпохи часы редко устанавливались достаточно точно, чтобы в любом случае отображать значимые метки времени менее секунды. Время Unix не является подходящим способом представления времени до 1972 года в приложениях, требующих субсекундной точности; такие приложения должны, по крайней мере, определять, какую форму UT или GMT они используют.
По состоянию на 2009 год [Обновить] рассматривается возможность прекращения использования дополнительных секунд в гражданском времени. [15] Вероятным средством выполнения этого изменения является определение новой шкалы времени, называемой Международное время, который первоначально соответствует UTC, но после этого не имеет дополнительных секунд, поэтому остается с постоянным смещением от TAI. Если это произойдет, вполне вероятно, что время Unix будет перспективно определено в терминах этой новой шкалы времени, а не в формате UTC. Неуверенность в том, произойдет ли это, делает предполагаемое время Unix не менее предсказуемым, чем оно есть сейчас: если бы UTC просто не имело дополнительных секунд, результат был бы таким же.
История
В самых ранних версиях Unix time было 32-битное целое число, увеличивающееся со скоростью 60Гц, которая была частотой системных часов на оборудовании ранних систем Unix. В результате значение 60 Гц все еще появляется в некоторых интерфейсах программного обеспечения. Эпоха также отличалась от нынешнего значения. В первом издании Unix Programmer’s Manual от 3 ноября 1971 года время Unix определяется как «время с 00:00:00 1 января 1971 года, измеренное в шестидесятых долях секунды». [16]
Как указано в приведенном выше определении, шкала времени Unix изначально предназначалась для простого линейного представления времени, прошедшего с эпохи. Тем не менее, детали шкалы времени не рассматривались, и было неявно предполагалось, что простая линейная шкала времени уже доступна и согласована. В определении руководства первого издания даже не указывается, какой часовой пояс используется. Несколько более поздних проблем, включая сложность настоящего определения, являются результатом того, что время Unix определялось постепенно путем использования, а не полностью определялось с самого начала.
Когда POSIX.1 был написан, встал вопрос как точно определить time_t перед лицом дополнительных секунд. Комитет POSIX рассмотрел вопрос о том, должно ли время Unix оставаться, как задумано, линейным отсчетом секунд с эпохи за счет сложности преобразований с гражданским временем или представления гражданского времени за счет несогласованности в дополнительных секундах. Компьютерные часы той эпохи не были достаточно точно настроены, чтобы так или иначе образовать прецедент.
Комитет POSIX склонялся к аргументам против сложности функций библиотеки, [ нужна цитата ] и твердо определил время Unix простым способом в терминах элементов времени UTC. Это определение было настолько простым, что даже не охватывало високосный год по григорианскому календарю, и 2100 год станет високосным.
Версия POSIX.1 2001 г. исправила ошибочное правило високосного года в определении времени Unix, но сохранила существенное определение времени Unix как кодировки UTC, а не линейной шкалы времени. С середины 1990-х компьютерные часы обычно устанавливались с достаточной точностью, чтобы это имело значение, и чаще всего они устанавливались с использованием определения времени Unix на основе UTC. Это привело к значительной сложности реализаций Unix и Сетевой протокол времени, чтобы выполнять шаги во временном номере Unix всякий раз, когда возникают дополнительные секунды. [ нужна цитата ]
Известные события во времена Unix
Энтузиасты Unix имеют опыт проведения «вечеринок time_t» (произносится как «время чаепития»), чтобы отметить значительные значения числа времени Unix. [17] [18] Они прямо аналогичны новый год праздники, которые происходят при смене года во многих календарях. По мере того, как время использования Unix расширялось, росла и практика празднования его вех. Обычно это значения времени, которые представляют собой круглые числа в десятичный которые отмечаются в соответствии с соглашением Unix о просмотре time_t значения в десятичном формате. Среди некоторых групп вокруг двоичный числа тоже отмечаются, например +2 30 что произошло в 13:37:04 UTC в субботу, 10 января 2004 г. [ нужна цитата ]
События, которые они отмечают, обычно описываются как «N секунд с эпохи Unix «, но это неточно; как обсуждалось выше, из-за обработки дополнительных секунд во времени Unix количество секунд, прошедших с эпохи Unix, немного больше, чем число времени Unix для времен более позднего, чем эпоха.
В литературе и календаре
Вернор Винджроман Глубина в небе описывает космическую торговую цивилизацию на тысячи лет в будущем, которая все еще использует эпоху Unix. «программист-археолог»ответственный за поиск и поддержание пригодного для использования кода в зрелых компьютерных системах сначала считает, что эпоха относится к тому времени, когда человек впервые ступил на Луну, но затем понимает, что это «0-секундная секунда одной из первых компьютерных операционных систем человечества». [29]