В вычислительной технике эпоха — это фиксированная дата и время, используемые в качестве точки отсчета, от которой компьютер измеряет системное время . Большинство компьютерных систем определяют время как число, представляющее собой секунды, удаленные от определенной произвольной даты и времени. Например, Unix и POSIX измеряют время как количество секунд, прошедших с четверга 1 января 1970 года 00:00:00 UT , момента времени, известного как эпоха Unix . Системы Windows NT , вплоть до Windows 11 и Windows Server 2022 , измеряют время как количество 100-наносекундных интервалов, прошедших с 1 января 1601 года 00:00:00 UTC, что делает этот момент времени эпохой для этих систем. [1] Эпохи вычислений почти всегда указываются как полночь по всемирному времени в определенную дату.
Системы программного обеспечения для измерения времени сильно различаются по разрешению измерения времени; некоторые системы могут использовать единицы времени размером с день, в то время как другие могут использовать наносекунды . Например, для даты эпохи полночь UTC (00:00) 1 января 1900 года и единицы времени секунда, время полуночи (24:00) между 1 января 1900 года и 2 января 1900 года представлено числом 86400, количеством секунд в одном дне. Когда необходимо представить время до эпохи, обычно используют ту же систему, но с отрицательными числами.
Такое представление времени предназначено в основном для внутреннего использования. В системах, где дата и время важны в человеческом смысле, программное обеспечение почти всегда преобразует это внутреннее число в дату и время, представляющие человеческий календарь.
Компьютеры, как правило, не хранят произвольно большие числа. Вместо этого каждому числу, хранящемуся в компьютере, выделяется фиксированный объем пространства. Поэтому, когда количество единиц времени, прошедших с эпохи системы, превышает наибольшее число, которое может поместиться в пространстве, выделенном для представления времени, представление времени переполняется , и могут возникнуть проблемы. Хотя поведение системы после переполнения не обязательно предсказуемо, в большинстве систем число, представляющее время, сбросится до нуля, и компьютерная система снова будет думать, что текущее время является временем эпохи.
Наиболее известными из них были старые системы, которые отсчитывали время как количество лет, прошедших с эпохи 1 января 1900 года, и которые выделяли достаточно места только для хранения чисел от 0 до 99, столкнувшись с проблемой 2000 года . Эти системы (если их заранее не исправить) интерпретировали дату 1 января 2000 года как 1 января 1900 года, что приводило к непредсказуемым ошибкам в начале 2000 года.
Даже системы, которые выделяют больше памяти для представления времени, не застрахованы от такого рода ошибок. Многие операционные системы типа Unix, которые ведут отсчет времени в секундах, прошедших с даты эпохи 1 января 1970 года, и выделяют достаточно памяти для хранения чисел размером до 2 147 483 647, столкнутся с проблемой переполнения 19 января 2038 года. Это известно как проблема 2038 года .
В вычислениях существуют и другие, более тонкие проблемы хронометража, такие как учет високосных секунд , которые не наблюдаются с какой-либо предсказуемостью или регулярностью. Кроме того, приложения, которым необходимо представлять исторические даты и время (например, представлять дату до перехода с юлианского календаря на григорианский ), должны использовать специализированные библиотеки хронометража .
Наконец, некоторое программное обеспечение должно поддерживать совместимость со старым программным обеспечением, которое не отслеживает время в строгом соответствии с традиционными системами отсчета времени. Например, Microsoft Excel отмечает вымышленную дату 29 февраля 1900 года , чтобы сохранить совместимость с ошибками со старыми версиями Lotus 1-2-3 . [2] Lotus 1-2-3 отслеживал дату из-за ошибки; к тому времени, когда ошибка была обнаружена, было уже слишком поздно ее исправлять — «изменение сейчас нарушило бы формулы, которые были написаны для учета этой аномалии». [3]
Существует не менее шести спутниковых навигационных систем, все из которых функционируют путем передачи сигналов времени . Из двух спутниковых систем с глобальным покрытием GPS вычисляет свой сигнал времени из эпохи, тогда как ГЛОНАСС вычисляет время как смещение от UTC , с вводом UTC, скорректированным на високосные секунды . Из двух других систем, нацеленных на глобальное покрытие, Galileo вычисляет из эпохи, а BeiDou вычисляет из UTC без корректировки на високосные секунды. [4] [ нужно обновление? ] GPS также передает смещение между временем UTC и временем GPS и должен обновлять это смещение каждый раз, когда появляется високосная секунда , требуя, чтобы приемные устройства GPS правильно обрабатывали обновление. Напротив, високосные секунды прозрачны для пользователей ГЛОНАСС. Сложности расчета UTC из эпохи объясняются Европейским космическим агентством в документации Galileo в разделе «Уравнения для корректировки шкалы времени системы до опорной шкалы времени». [5]
В следующей таблице перечислены даты эпох, используемые популярным программным обеспечением и другими компьютерными системами. Время в этих системах хранится как количество определенной единицы времени (дней, секунд, наносекунд и т. д.), прошедшее с указанного времени (обычно полночь UTC в начале указанной даты).
Примечание: когда значения временных меток хранятся как восьмибайтовые целые числа (в настоящее время по умолчанию), микросекундная точность доступна для всего диапазона значений. […] Значения временных меток хранятся как секунды до или после полуночи 2000-01-01.