Эпоха — фиксированное время и дата, используемые в качестве точки отсчёта компьютерного системного времени. Большинство компьютерных систем определяют время как число, представляющее количество секунд, прошедших с определённой произвольной даты и времени. Например, Unix и POSIX измеряют время как число секунд, прошедших с 1 января 1970 года 00:00:00 UT, точки во времени, известной как эпоха Unix. C# и системы Windows NT, включая Windows 11 и Windows Server 2022, измеряют время как число 100-наносекундных интервалов, прошедших с 00:00:00UTC 1 января 1 года нашей эры и 1601 года нашей эры соответственно, что делает эти моменты времени эпохами для данных систем. Эпохи в вычислениях почти всегда опредлеляются как полночь по всемирному времени в определённую дату.

Точность и представление

Системы учёта времени в программном обеспечении значительно различаются по измерения времени. Некоторые системы могут использовать в качестве единицы времени день, другие могут использовать наносекунды. Например, для эпохи, начинающейся в полночь по всемирному времени (UTC 00:00:00) 1 января 1900 года, и точности до секунды, время в полночь 24:00:00 1 января 1900 года будет представлено числом 86400, количеством секунд за день. Если нужно представить данные до начала эпохи, обычно используется та же система, но с отрицательными числами.

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

Проблемы

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

Наиболее известной проблемой стала проблема 2000 года, возникшая в системах, которые отсчитывали время как число лет с начала эпохи 1 января 1900 года, и имели ограниченное пространство для хранения чисел от 0 до 99. Эти системы (если не были исправлены заранее) интерпретировали бы дату 1 января 2000 как 1 января 1900 года, что привело бы к непредсказыемым ошибкам в начале 2000 года.

Даже системы, которые выделяют больше места для хранения времени не имеют иммунитета к такого рода ошибкам. Многие Unix-подобные операционные системы, хранящие время в секундах от начала эпохи 1 января 1970 года и выделяющие достаточно места для хранения чисел вплоть до , столкнутся с проблемой переполнения 19 января 2038 года. Это известно как проблема 2038 года.

Существуют и другие, более тонкие проблемы, связанные со временем, такие как учёт дополнительных секунд, которые появляются непредсказуемо и нерегулярно. Кроме того, приложения, которым необходимо представлять исторические даты и время (например, представлять даты до перехода с юлианского календаря на григорианский) должны использовать специализированные библиотеки работы со временем.

Наконец, некоторые программные продукты должны поддерживать совместимость с более старыми продуктами, которые не хранили время в строгом соответствии с традиционными системами отсчёта времени. Например, Microsoft Excel учитывает несуществующую дату 29 февраля 1900 года для сохранения совместимости с ошибками в старых версиях Lotus 1-2-3. Lotus 1-2-3 учитывал эту дату из-за ошибки. К тому времени, когда ошибка была обнаружена, исправить её было уже поздно — «изменение сейчас нарушило бы формулы, которые были написаны с учётом этой аномалии». .

В спутниковых системах времени Имеется как минимум шесть систем спутниковой навигации, все они работают, передавая сигналы времени. Из двух спутниковых систем с глобальным покрытием, GPS рассчитывает свой сигнал от эпохи, в то время как GLONASS вычисляет врем как смещение от UTC, причём входные данные UTC корректируются на дополнительные секунды. Из двух других систем, претендующих на глобальное покрытие, Galileo вычисляет время от эпохи, а Бэйдоу вычисляет как смещение от UTC без поправки на дополнительные секунды. GPS передаёт также смещение между временем UTC и временем GPS и должен обновлять это смещение каждый раз, кода добавляется дополнительная секунда, что требует от GPS-приёмных устройств правильной обработки этого обновления. В отличие от этого, для пользователей ГЛОНАСС дополнительные секунды незаметны. Сложности расчёта UTC от эпохи объясняются Европейским космическим агентством в документации Galileo в разделе «Уравнения для коррекции системного времени до эталонного времени».

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

Дата эпохи Заметные применения Обоснование выбора 0 января 1 до нашей эры MATLAB «Год 0» в ISO 8601 1 января 1 года НЭ .NET Go, REXX, Rata Die Наша эра, , RFC 3339 14 октября 1582 года SPSS, IBM z/OS Языковая среда, IBM AIX COBOL То же, что и ниже, но с индексацией с единицы 15 октября 1582 года UUID version 1 Дата григорианской реформы христианского календаря. 1 января 1601 года NTFS, COBOL, Win32/Win64 (эпоха NT) 1601 год был первым годом 400-летнего цикла григорианского календаря во время создания Windows NT. 31 декабря 1840 года Язык программирования MUMPS 1841 год был невисокосным, за несколько лет до года рождения старейшего гражданина США, когда был разработан язык. 17 ноября 1858 гда TENEX, VMS, Военно-морская обсерватория США, DVB SI 16-битное представление дней, другие вычисления, связанные с астрономией 17 ноября 1858, 00:00:00 UT является началом отсчёта модифицированного юлианского дня, эквивалентному юлианскому дню 2400000,5 10 мая 1869 года PHAMIS дата, используемая в продуктах , работающих с электронными медицинскими картами на серверах Дата золотого костыля на , когда Центральная Тихоокеанская железная дорога и Union Pacific наконец встретились в Промонтори (Юта) в мае 1869 года. 30 декабря 1899 года , Object Pascal, LibreOffice Calc, Внутреннее значение, используемое в Microsoft Excel для совместимости с Lotus 1-2-3. 31 декабря 1899 года Dyalog APL, Microsoft C/C++ 7.0 Дата выбрана так, что по модулю 7 дата будет давать 0=воскресенье, 1=понедельник, 2=вторник, 3=среда, 4=четверг, 5=пятница и 6=суббота. Последняя версия не-Visual C/C++ от Microsoft использовала это, но впоследствии было внесено обратное изменение. 0 января 1900 года Microsoft Excel, Lotus 1-2-3 Хотя логически дата 0 января 1900 года эквивалентна 31 декабря 1899, эти системы не позволяют пользователю задать 31 декабря 1899. Поскольку 1900 ошибочно считается високосным, в этих системах 0 January 1900 фактически соответствует исторической дате 30 декабря 1899 года. 1 января 1900 года Network Time Protocol, , CICS, Операционные системы IBM от MVS до z/OS, Mathematica, RISC OS, VME, Common Lisp, 1 января 1901 года Ada В первой версии языка диапазон дат был ограничен 1901—2099 годами, чтобы избежать лет, на которые влияло . Когда верхняя граница была расширена в более поздних версиях, нижняя граница осталась той же самой, чтобы обеспечить обратную совместимость с системами, которые использовали её как точку отсчёта. 1 января 1904 года LabVIEW, Apple Inc.'s Классическая Mac OS, JMP Scripting Language, Palm OS, MP4, Microsoft Excel (опционально), 1904 год является первым високосным годом 20-го века. 1 января 1960 года 31 декабря 1967 года и варианты (jBASE, Universe, Unidata, Revelation, Reality) Дата выбрана так, что по модулю 7 дата будет давать 0=воскресенье, 1=понедельник, 2=вторник, 3=среда, 4=четверг, 5=пятница и 6=суббота. 1 января 1970 Эпоха Unix используемая в стандарте времени POSIX, применяется в Unix и Unix-подобных системах (Linux, macOS, Android), а также в языках программирования: большинство реализаций C/C++, Java, JavaScript, Perl, PHP, Python, Ruby, Tcl, ActionScript. Также используется протоколом Precision Time Protocol. 1 января 1978 года AmigaOS. Аппаратные системы Commodore Amiga были представлены в период с 1985 по 1994 год. Последняя версия ОС 4.1 (декабрь 2016 г.). AROS, MorphOS. 1 января 1980 года IBM BIOS INT 1Ah, Файловые системы DOS, OS/2, FAT12, FAT16, FAT32, exFAT, ZIP формат и производные IBM PC с его BIOS, а также 86-DOS, MS-DOS и PC DOS с файловой системой FAT12 были разработаны и представлены между 1980 и 1981 годами. 6 января 1980 года Qualcomm BREW, GPS, ATSC 32-битное время GPS считает недели (неделя определяется как начинающаяся в воскресенье) и 6 января является первым воскресеньем в 1980 году. Недели хранятся в 10-битном поле и первое GPS переполнение числа недель произошло в августе 1999. 31 декабря 1989 года Garmin FIT эпоха. Стандарт, разработанный Garmin как часть их FIT протокола, который был принят многими как де-факто стандарт в индустрии фитнес-устройств. 1 января 2000 года , , PostgreSQL, Zigbee UTCTime, Ingenuity helicopter, GameCubeЭта эпоха Y2K используется иногда, чтобы сдвинуть проблему 2038 года на 2068 год, если процессор не поддерживает 64-битные операции. 1 января 2001 года NSDate в фреймворке Cocoa от Apple, NeXTSTEP Первый день третьего тысячелетия нашей эры. 1 января 2005 года дата по умолчанию как стартовая точка Bada OS от Samsung на Samsung Wave и Samsung Wave II (не Android) Bada OS основана на Linux первый день 2005 года.

См. также Системные часы Unix-время

Примечания

Литература

National Institute of Standards and Technology (NIST)

Ссылки Critical and Significant Dates (J. R. Stockton), an extensive list of dates that are problematic for various operating systems and computing devices. Potential problem dates for computers (pdf) A list of potential problem dates for computers and software from 2001 to 2100 (IET).

Категория:Календарь