В вычислениях эпоха - это дата и время, от которых компьютер отсчитывает системное время . Большинство компьютерных систем определяют время как число, представляющее секунды, удаленные от конкретной произвольной даты и времени. Например, Unix и POSIX измеряют время как количество секунд, прошедших с 1 января 1970 года 00:00:00 UT , момент времени, известный как эпоха Unix . Время эпохи NT на Windows NT , а затем обращается к системному времени в Windows NT с интервалами (10 ^ -7) от 0h 1 января 1601. [1]
Эпохи вычислений почти всегда указываются как полночь по всемирному времени в определенный день.
Вариация в деталях
Программные системы хронометража широко различаются по точности измерения времени (детализации); некоторые системы могут использовать единицы времени величиной с день, в то время как другие могут использовать наносекунды . Например, для даты эпохи в полночь по всемирному координированному времени (00:00) 1 января 1900 г. и единицы времени в секунду время полуночи (24:00) между 1 января 1900 г. и 2 января 1900 г. представлено число 86400, количество секунд в одном дне. Когда необходимо представить времена до эпохи, обычно используют ту же систему, но с отрицательными числами.
Такое представление времени в основном предназначено для внутреннего использования. В системах, где дата и время важны в человеческом смысле, программное обеспечение почти всегда преобразует это внутреннее число в дату и время, представляющие человеческий календарь.
Проблемы с компьютерным представлением времени на основе эпох
Компьютеры обычно не хранят произвольно большие числа. Вместо этого каждому числу, хранящемуся на компьютере, выделяется фиксированный объем места. Следовательно, когда количество единиц времени, прошедших с эпохи системы, превышает наибольшее число, которое может поместиться в пространстве, выделенном для представления времени, представление времени переполняется , и могут возникнуть проблемы. Хотя поведение системы после переполнения не обязательно предсказуемо, в большинстве систем число, представляющее время, будет сброшено на ноль, и компьютерная система будет думать, что текущее время снова является временем эпохи.
Наиболее известно, что старые системы, которые считали время количеством лет, прошедших с эпохи 1 января 1900 года, и которые выделяли достаточно места только для хранения чисел от 0 до 99, столкнулись с проблемой 2000 года . Эти системы (если их не исправить заранее) будут интерпретировать дату 1 января 2000 года как 1 января 1900 года, что приведет к непредсказуемым ошибкам в начале 2000 года.
Даже системы, которые выделяют больше памяти для представления времени, не защищены от ошибок такого рода. Многие Unix-подобные операционные системы, которые хранят время в секундах, прошедших с даты эпохи 1 января 1970 года, и выделяют достаточно памяти для хранения чисел размером до 2147483647 , столкнутся с проблемой переполнения 19 января 2038 года, если ее не устранить заранее. Это известно как проблема 2038 года . Поправка, включающая удвоение памяти, выделенной для хронометража в этих системах, позволит им представлять даты более чем на 290 миллиардов лет в будущем.
В вычислительной технике существуют и другие, более тонкие проблемы хронометража, такие как учет дополнительных секунд , которые не наблюдаются с какой-либо предсказуемостью или регулярностью. Кроме того, приложения, которые должны представлять исторические даты и время (например, представлять дату до перехода с юлианского календаря на григорианский ), должны использовать специализированные библиотеки хронометража .
Наконец, некоторое программное обеспечение должно поддерживать совместимость со старым программным обеспечением, которое не отслеживает время в строгом соответствии с традиционными системами хронометража. Например, Microsoft Excel отмечает вымышленную дату 29 февраля 1900 года , чтобы поддерживать совместимость ошибок со старыми версиями Lotus 1-2-3 . [2] Lotus 1-2-3 заметил дату из-за ошибки; к тому времени, когда ошибка была обнаружена, было уже слишком поздно исправлять ее - «изменение сейчас нарушило бы формулы, которые были написаны с учетом этой аномалии». [3]
Эпоха в спутниковых системах времени
Существует как минимум шесть спутниковых навигационных систем, каждая из которых передает сигналы времени . Из двух только двух спутниковых систем с глобальным покрытием GPS вычисляет свой сигнал времени по эпохе, тогда как ГЛОНАСС вычисляет время как смещение от всемирного координированного времени ( UTC) , при этом ввод всемирного координированного времени корректируется с учетом дополнительных секунд . Из двух других систем, нацеленных на глобальный охват, Galileo рассчитывает по эпохе, а Beidou рассчитывает по всемирному координированному времени без поправки на дополнительные секунды. [4] GPS также передает смещение между временем UTC и временем GPS и должен обновлять это смещение каждый раз, когда есть дополнительная секунда , что требует от принимающих устройств GPS правильной обработки обновления. В отличие от этого, дополнительные секунды прозрачны для пользователей ГЛОНАСС. Сложности вычисления UTC для эпохи объясняются Европейским космическим агентством в документации Galileo в разделе «Уравнения для корректировки шкалы времени системы на эталонную шкалу времени». [5]
Известные эпохи в вычислительной технике
В следующей таблице перечислены эпохи, используемые популярным программным обеспечением и другими компьютерными системами. Время в этих системах хранится как количество в определенной единице времени (дни, секунды, наносекунды и т. Д.), Прошедшее с указанного времени (обычно в полночь по всемирному координированному времени в начале заданной даты).
Дата эпохи | Известные применения | Обоснование выбора |
---|---|---|
0 января 1 г. до н. Э. [Nb 1] | MATLAB [6] | |
1 января 1 г. н.э. [nb 1] | Microsoft .NET , [7] [8] Go , [9] REXX , [10] Rata Die [11] | Common Era , ISO 2014 , [12] RFC 3339 [13] |
14 октября 1582 г. | SPSS [14] | |
15 октября 1582 г. | UUID версии 1 | Дата григорианской реформы христианского календаря. [15] |
1 января 1601 г. | NTFS , COBOL , Win32 / Win64 (эпоха NT) | 1601 год был первым годом 400-летнего цикла по григорианскому календарю на момент создания Windows NT. [16] |
31 декабря 1840 г. | Язык программирования MUMPS | 1841 год был невисокосным, за несколько лет до года рождения самого старого из ныне живущих гражданина США, когда был разработан язык. [17] |
17 ноября 1858 г. | VMS , Военно-морская обсерватория США , 16-битные дневные метки DVB SI, другие вычисления, связанные с астрономией [18] | 17 ноября 1858, 00:00:00 UT является нулем Модифицированного дня Julian ( MJD ) эквивалентно Julian дня 2400000.5 [19] |
30 декабря 1899 г. | Microsoft COM DATE , Object Pascal , LibreOffice Calc , Google Таблицы [20] | Техническое внутреннее значение, используемое Microsoft Excel; для совместимости с Lotus 1-2-3 . [2] |
31 декабря 1899 г. | Dyalog APL , [21] Microsoft C / C ++ 7.0 [22] | Выбрано так, чтобы (модификатор даты 7) производил 0 = воскресенье, 1 = понедельник, 2 = вторник, 3 = среда, 4 = четверг, 5 = пятница и 6 = суббота. Последняя версия Microsoft не-Visual C / C ++ использовала это, но впоследствии была отменена. |
0 января 1900 г. | Microsoft Excel , [2] Lotus 1-2-3 [23] | Хотя логически 0 января 1900 г. эквивалентно 31 декабря 1899 г., эти системы не позволяют пользователям указывать последнюю дату. Поскольку 1900 год в этих системах неверно рассматривается как високосный год , 0 января 1900 года фактически соответствует исторической дате 30 декабря 1899 года. |
1 января 1900 г. | Протокол сетевого времени , IBM CICS , Mathematica , RISC OS , VME , Common Lisp , Michigan Terminal System | |
1 января 1904 г. | LabVIEW , Apple , Inc. «s классический Mac OS , JMP Язык сценариев, Palm OS , MP4 , Microsoft Excel ( по желанию), [24] ИГОРЬ Pro | 1904 год - первый високосный год ХХ века. [25] |
1 января 1960 г. | Система SAS [26] | |
31 декабря 1967 г. | Выберите ОС и варианты (jBASE, Universe, Unidata, Revelation, Reality) | Выбрано так, чтобы (модификатор даты 7) производил 0 = воскресенье, 1 = понедельник, 2 = вторник, 3 = среда, 4 = четверг, 5 = пятница и 6 = суббота. [27] |
1 января 1970 г. | Эпоха Unix, также известная как время POSIX , используется Unix и Unix-подобными системами ( Linux , macOS ) и языками программирования : большинство реализаций C / C ++ , [28] Java , JavaScript , Perl , PHP , Python , Ruby , Tcl , ActionScript . Также используется протоколом точного времени . | |
1 января 1978 г. | AmigaOS . [29] [nb 2] Аппаратные системы Commodore Amiga были представлены между 1985 и 1994 годами. Последняя версия ОС 4.1 (декабрь 2016). AROS , MorphOS . | |
1 января 1980 г. | IBM BIOS INT 1Ah, DOS , OS / 2 , FAT12 , FAT16 , FAT32 , EXFAT файловые системы | IBM PC с его BIOS, а также 86-DOS , MS-DOS и PC DOS с их файловой системой FAT12 были разработаны и представлены между 1980 и 1981 годами. |
6 января 1980 г. | Qualcomm BREW , GPS , 32-битные временные метки ATSC | GPS считает недели (определено, что неделя начинается в воскресенье), а 6 января - первое воскресенье 1980 года. [30] [31] |
1 января 2000 г. | AppleSingle , AppleDouble , [32] PostgreSQL , [33] [nb 3] ZigBee UTCTime, [34] Вертолет изобретательности [35] | |
1 января 2001 г. | Яблоко «s Cocoa рамки | 2001 год - год выпуска Mac OS X 10.0 (но NSDate для Apple EOF 1.0 был разработан в 1994 году). |
Смотрите также
- Системное время
- Эпоха Unix
Заметки
- ^ a b Пролептический григорианский календарь.
- ^ AmigaOS измеряет время в секундах и сохраняет его в виде 32-битного целого числа со знаком. После 19 января 2046 г., 03:14:07 дата будет отрицательной. В последней версии ОС 4.1 (2016) это не исправлено.
- ^ Имейте в виду, что функция Epoch возвращает UNIX EXTRACT EXTRACT Epoch (EPOCH FROM TIMESTAMP WITH TIME ZONE '1970-01-01 00: 00: 00-00'); возвращает 0.
Рекомендации
- ^ W32tm | Документы Microsoft
- ^ a b c Спольски, Джоэл. «Почему форматы файлов Microsoft Office такие сложные? (И некоторые обходные пути)» . Проверено 8 марта 2009 .
- ^ Дершовиц, Начум ; Рейнгольд, Эдвард (2008). Календарные расчеты (3-е изд.). Издательство Кембриджского университета . стр. xxi, xxvi. ISBN 978-0-521-70238-6.
- ^ Субирана, Дж. Санс; Зорноза, Дж. М. Хуан; Эрнандес-Пахарес, М. (2011). «Справка времени в GNSS» . gssc.esa.int/navipedia . Европейское космическое агентство.
- ^ «Описание шкалы времени GNSS Галилео» (PDF) . Управление Организации Объединенных Наций по вопросам космического пространства. 2016. Раздел 5d.
- ^ "datenum" , MathWorks, дата обращения 07.07.2015.
- ^ «Класс GregorianCalendar» . MSDN . Замечания . Проверено 26 апреля 2015 .
- ^ « DateTimeOffset Structure » (.NET Framework 4.5), MSDN , 2015.
- ^ «Время упаковки» . golang.org . Проверено 26 апреля 2015 .
- ^ «Дата - справочник z / OS TSO / E REXX» . IBM.com . IBM. 2014. SA32-0972-00.
- ^ Дершовиц, Начум ; Рейнгольд, Эдвард (2008). «Григорианский календарь». Календарные расчеты (3-е изд.). Издательство Кембриджского университета. ISBN 978-0-521-70238-6.
- ^ Коулишоу, Майк Фредерик (1990). Язык Rexx: практический подход к программированию (2-е изд.). Прентис Холл. С. 93, 177. ISBN 0-13-780651-5.
- ^ «Примечания к выпуску Go 1 - Основные изменения в библиотеке - Время» . golang.org. 2012-03-28 . Проверено 26 апреля 2015 .
- ^ «Форматы даты и времени» . IBM.com . IBM . Проверено 24 января 2020 .
- ^ Leach, P .; Питание, М .; Зальц, Р. (июль 2005 г.). «RFC 4122: Предлагаемый стандарт: пространство имен URN универсального уникального идентификатора (UUID)» . tools.ietf.org . Инженерная группа Интернета.
- ^ Чен, Раймонд (2009-03-06). «Почему наступила эпоха Win32 1 января 1601 года?» . Старая новая вещь . Блоги MSDN.
- ^ "Что случилось в 1841 году?" . Часто задаваемые вопросы о технологиях M и языке MUMPS, часть 1/2 . Архивировано из оригинала на 2015-08-28 . Проверено 14 августа 2015 .
- ^ Винклер, Гернот М.Р. «Модифицированная юлианская дата» . Военно-морская обсерватория США . Архивировано из оригинала на 2013-02-14 . Проверено 29 января 2015 .
- ^ «Происхождение базового времени VMS» . vms.tuwien.ac.at/info/humour . Technische Universität Wien. Архивировано из оригинала на 2007-06-06.
- ^ «Введение в API Google Таблиц» . Разработчики Google .
- ^ «Число Международного дня» . help.dyalog.com . Проверено 27 ноября 2018 .
- ^ «Тайм-менеджмент» . msdn.microsoft.com .
- ^ «Что стоит за базовой датой 30 декабря 1899 года?» . social.msdn.microsoft.com .[ постоянная мертвая ссылка ]
- ^ «Дата и время в Excel» . cpearson.com .
- ^ «MacTech - журнал технологий Apple» . mactech.com .
- ^ «Введение в даты и время в SAS» (PDF) .
- ^ Марк Пик, Международная конференция по спектру, апрель 2010 г.
- ^ «time_t - Справочник по C ++» . Проверено 6 апреля 2015 .
- ^ Бартел, Олаф (сентябрь 1998 г.). «Файл: проблема 2000 года и Амига» . Обязательство.free.fr .
- ^ Левин, Иуда (05.07.2002). «Распределение времени и частоты с использованием спутников» (PDF) . Отчеты о достижениях физики . 65 (8) - через Национальный институт стандартов и технологий (NIST).
- ^ «Системы времени и даты - Время GPS» . Отдел океанографии, НПС . Военно-морская аспирантура, факультет океанографии. Архивировано из оригинала на 2019-01-02 . Проверено 18 февраля 2019 .
- ^ «AppleSingle / AppleDouble Formats for Foreign Files Developer's Note» (PDF) . Архивировано из оригинального (PDF) 17 июля 2011 года . Проверено 23 октября 2007 .
- ^ «Документация по PostgreSQL 9.1.24. Глава 8: Типы данных. 8.5. Типы даты / времени» . PostgreSQL.org .
Примечание. Когда значения временной метки хранятся в виде восьмибайтовых целых чисел (в настоящее время это значение по умолчанию), точность в микросекундах доступна для всего диапазона значений. […] Значения меток времени сохраняются в секундах до или после полуночи 01.01.2000.
- ^ «Спецификация кластерной библиотеки ZigBee» . Раздел 2.5.2.21 UTCTime.
- ^ "https://twitter.com/nasajpl/status/1389714335107207168/photo/1" . Twitter . Проверено 5 мая 2021 . Внешняя ссылка в
|title=
( помощь )
Внешние ссылки
- Критические и значащие даты (JR Stockton), обширный список дат, которые проблематичны для различных операционных систем и вычислительных устройств.
- Даты потенциальных проблем для компьютеров (pdf) Список дат потенциальных проблем для компьютеров и программного обеспечения с 2001 по 2100 годы (IET).