Эпоха (вычисления)
В вычислительной технике эпоха — это фиксированные дата и время, используемые в качестве эталона, по которому компьютер измеряет системное время . Большинство компьютерных систем определяют время как число, представляющее секунды, удаленные от определенной произвольной даты и времени. Например, Unix и POSIX измеряют время как количество секунд, прошедших с четверга 1 января 1970 года 00:00:00 UT , момента времени, известного как эпоха Unix . Системы Windows NT , вплоть до Windows 11 и Windows Server 2022 включительно , измеряют время как количество 100-наносекундных интервалов, прошедших с 1 января 1601 года 00:00:00 UTC, что делает этот момент времени эпохой для этих систем. [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 года, и выделяют достаточно памяти для хранения чисел размером до 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]
Известные даты эпохи вычислений
[ редактировать ]В следующей таблице перечислены даты эпох, используемые популярным программным обеспечением и другими компьютерными системами. Время в этих системах хранится как количество определенной единицы времени (дни, секунды, наносекунды и т. д.), прошедшее с указанного времени (обычно полночь по всемирному координированному времени в начале заданной даты).
Дата эпохи | Известные применения | Обоснование выбора |
---|---|---|
0 1 января до н. э. [номер 1] | МАТЛАБ [6] | «Год 0» в ISO 8601 |
1 января 1 г. н.э. [номер 1] | Microsoft.NET , [7] [8] Идти , [9] РЕКСС , [10] Рата Ди [11] | Наша эра , ISO 2014 , [12] RFC 3339 [13] |
14 октября 1582 г. | СПСС , [14] Языковая среда IBM z/OS, [15] IBM AIX КОБОЛ [16] | То же, что показано ниже, но с индексацией по единице. |
15 октября 1582 г. | UUID версии 1 | Дата григорианской реформы христианского календаря. [17] |
1 января 1601 г. | NTFS , КОБОЛ , [18] Win32 / Win64 (временная эпоха NT) [19] [20] | 1601 год был первым годом 400-летнего цикла по григорианскому календарю на момент создания Windows NT. [19] |
31 декабря 1840 г. | MUMPS Язык программирования | 1841 год был невисокосным, за несколько лет до рождения самого старого из ныне живущих граждан США, когда был разработан этот язык. [21] |
17 ноября 1858 г. | VMS , Военно-морская обсерватория США , 16-битные дневные отметки DVB SI, другие астрономией. вычисления, связанные с [22] | 17 ноября 1858 года, 00:00:00 UT — это ноль модифицированного юлианского дня (MJD), эквивалентного юлианского дня. 2400000,5 [23] |
10 мая 1869 г. | Дата PHAMIS, используемая в Lastword/Carecast/Centricity Enterprise EHR, работающем на Tandem/NonStop. серверах | Дата создания трансконтинентальной железной дороги Golden Spike , когда железные дороги Central Pacific и Union Pacific наконец встретились на мысе Саммит, штат Юта, в мае 1869 года. |
30 декабря 1899 г. | Microsoft COM DATE , Object Pascal , LibreOffice Calc , Google Таблицы [24] | Техническое внутреннее значение, используемое Microsoft Excel; для совместимости с Lotus 1-2-3 . [2] |
31 декабря 1899 г. | Диалог АПЛ , [25] Microsoft Си/С++ 7.0 [26] | Выбрано так, чтобы (модуль даты 7) давал 0=воскресенье, 1=понедельник, 2=вторник, 3=среда, 4=четверг, 5=пятница и 6=суббота. Последняя версия Microsoft, отличная от Visual C/C++, использовала это, но впоследствии была отменена. |
0 января 1900 г. | Майкрософт Эксель , [2] Лотос 1-2-3 [27] | Хотя логически 0 января 1900 года эквивалентно 31 декабря 1899 года, эти системы не позволяют пользователям указывать последнюю дату. Поскольку в этих системах 1900 год ошибочно считается високосным , 0 января 1900 года фактически соответствует исторической дате 30 декабря 1899 года. |
1 января 1900 г. | Сетевой протокол времени , Протокол времени , IBM CICS , Mathematica , RISC OS , VME , Common Lisp , Michigan Terminal System | |
1 января 1901 г. | Есть [28] | В первой версии языка даты были ограничены диапазоном от 1901 до 2099, чтобы избежать годов, на которые распространяется правило 400 лет високосного года . Когда в более поздних версиях верхняя граница была расширена, нижняя граница осталась прежней для обеспечения обратной совместимости с системами, которые использовали ее в качестве исходной точки . [28] |
1 января 1904 г. | LabVIEW , Apple Inc. от классическая Mac OS , язык сценариев JMP, Palm OS , MP4 , Microsoft Excel (опционально), [29] ИГОРЬ Про | 1904 год — первый високосный год 20 века. [30] |
1 января 1960 г. | Система САС [31] | |
31 декабря 1967 г. | Выберите ОС и варианты (jBASE, Universe, Unidata, Revelation, Reality) | Выбрано так, чтобы (модуль даты 7) давал 0=воскресенье, 1=понедельник, 2=вторник, 3=среда, 4=четверг, 5=пятница и 6=суббота. [32] |
1 января 1970 г. | Эпоха Unix , используемая во времена POSIX , используемая Unix и Unix-подобными системами ( Linux , macOS , Android ) и языками программирования : большинство C / C++ , реализаций [33] Java , JavaScript , Perl , PHP , Python , Ruby , Tcl , ActionScript . Также используется протоколом точного времени . | |
1 января 1978 г. | АмигаОС . [34] [номер 2] Аппаратные системы Commodore Amiga были представлены в период с 1985 по 1994 год. Последняя версия ОС 4.1 (декабрь 2016 г.). АРОС , МорфОС . | |
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 года. [35] [36] |
31 декабря 1989 г. | Garmin FIT Эпоха. [37] Стандарт был разработан компанией Garmin как часть протокола FIT, который был принят многими в качестве фактического стандарта в индустрии фитнес-устройств. [38] | |
1 января 2000 г. | AppleSingle , AppleDouble , [39] PostgreSQL , [40] [номер 3] Зигби UTCTime, [41] изобретательности Вертолет [42] | Эта эпоха 2000 года [43] иногда используется, чтобы перенести проблему 2038 года на 2068 год, если процессор не поддерживает 64-разрядную версию. |
1 января 2001 г. | NSDate в Apple платформе Cocoa , NeXTSTEP | Первый день третьего тысячелетия нашей эры |
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Jump up to: а б Пролептический григорианский календарь.
- ^ AmigaOS измеряет время в секундах и сохраняет его в виде 32-битного целого числа со знаком. После 19 января 2046 года, 03:14:07 дата будет отрицательной. В последней версии ОС 4.1 (2016 г.) эта проблема не исправлена.
- ^ Имейте в виду, что функция Epoch возвращает unix Epoch SELECT EXTRACT(EPOCH FROM TIMESTAMP With TIME ZONE '1970-01-01 00:00:00-00'); возвращает 0.
Ссылки
[ редактировать ]- ^ «[MS-DTYP]: ВРЕМЯ ФАЙЛА» . Документы Майкрософт . 2020-03-30.
- ^ Jump up to: а б с Спольски, Джоэл (19 февраля 2008 г.). «Почему форматы файлов Microsoft Office такие сложные? (И некоторые обходные пути)» . Проверено 8 марта 2009 г.
- ^ Дершовиц, Нахум ; Рейнгольд, Эдвард (2008). Календарные расчеты (3-е изд.). Издательство Кембриджского университета . стр. XXI, XXVI. ISBN 978-0-521-70238-6 .
- ^ Субирана, Дж. Санс; Зорноза, Дж. М. Хуан; Эрнандес-Пахарес, М. (2011). «Привязки времени в ГНСС» . gssc.esa.int/navipedia . Европейское космическое агентство.
- ^ «Описание временной шкалы GNSS Galileo» (PDF) . Управление ООН по вопросам космического пространства. 2016. Раздел 5д.
- ^ «datenum» , MathWorks, по состоянию на 7 июля 2015 г.
- ^ «Класс григорианского календаря» . MSDN . Замечания . Проверено 26 апреля 2015 г.
- ^ « Структура DateTimeOffset » (.NET Framework 4.5), MSDN , 2015.
- ^ «Пакет времени» . golang.org . Проверено 26 апреля 2015 г.
- ^ «Дата — ссылка на z/OS TSO/E REXX» . IBM.com . ИБМ. 2014. СА32-0972-00.
- ^ Дершовиц, Нахум ; Рейнгольд, Эдвард (2008). «Григорианский календарь». Календарные расчеты (3-е изд.). Издательство Кембриджского университета. ISBN 978-0-521-70238-6 .
- ^ Коулишоу, Майк Фредерик (1990). Язык Rexx: практический подход к программированию (2-е изд.). Прентис Холл. стр. 93, 177. ISBN. 0-13-780651-5 .
- ^ «Примечания к выпуску Go 1 — Основные изменения в библиотеке — Время» . golang.org. 28 марта 2012 г. Проверено 26 апреля 2015 г.
- ^ «Форматы даты и времени» . IBM.com . ИБМ . Проверено 24 января 2020 г.
- ^ «CEEDATM — Преобразовать секунды в символьную метку времени» . Справочник по программированию языковой среды z/OS . ИБМ . 2021-03-22.
- ^ Руководство по программированию COBOL для AIX, версия 5.1 (PDF) (первое издание). ИБМ . Июнь 2015 г. CEEDATE — преобразовать дату Лилиан в символьный формат. SC27-5404-00.
- ^ Лич, П.; Миллинг, М.; Зальц, Р. (июль 2005 г.). «RFC 4122: Предлагаемый стандарт: пространство имен URN универсально уникального идентификатора (UUID)» . www.tools.ietf.org . Рабочая группа по интернет-инжинирингу.
- ^ ISO/IEC 1989:2014 - Информационные технологии. Языки программирования, их среды и интерфейсы системного программного обеспечения. Язык программирования COBOL . ИСО . 01.06.2014. п. 634.
- ^ Jump up to: а б Чен, Раймонд (6 марта 2009 г.). «Почему эпоха Win32 приходится на 1 января 1601 года?» . Старая новая вещь . Блоги MSDN.
- ^ «Структура FILETIME (minwinbase.h)» . Документы Майкрософт .
- ^ «Что произошло в 1841 году?» . Часто задаваемые вопросы по M-технологиям и языку MUMPS, часть 1/2 . Архивировано из оригинала 28 августа 2015 г. Проверено 14 августа 2015 г.
- ^ Винклер, Гернот М.Р. «Модифицированная юлианская дата» . Военно-морская обсерватория США . Архивировано из оригинала 14 февраля 2013 г. Проверено 29 января 2015 г.
- ^ «Происхождение базового времени VMS» . vms.tuwien.ac.at/info/humour . Венский технологический университет. Архивировано из оригинала 6 июня 2007 г.
- ^ «Введение в API Google Таблиц» . Разработчики Google .
- ^ «Номер Международного дня» . help.dyalog.com . Проверено 27 ноября 2018 г.
- ^ «Тайм-менеджмент» . msdn.microsoft.com .
- ^ «Что стоит за 30 декабря 1899 года как базовой датой?» . Social.msdn.microsoft.com . [ постоянная мертвая ссылка ]
- ^ Jump up to: а б Джон Барнс . «7.3 Время и даты» . Обоснование Ada 2005. Ассоциация ресурсов Ada.
- ^ «Даты и время в Excel» . cpearson.com .
- ^ «MacTech – Журнал технологий Apple» . mactech.com .
- ^ «Введение в даты и время в SAS» (PDF) .
- ^ Марк Пик, Международная конференция по спектру, апрель 2010 г.
- ^ «time_t — Справочник по C++» . Проверено 6 апреля 2015 г.
- ^ Бартель, Олаф (сентябрь 1998 г.). «Файл: Проблема 2000 года и Amiga» . амига.де .
- ^ Левин, Иуда (5 июля 2002 г.). «Распределение времени и частоты с помощью спутников» (PDF) . Отчеты о прогрессе в физике . 65 (8): 1119. Бибкод : 2002РПФ...65.1119Л . doi : 10.1088/0034-4885/65/8/201 – через Национальный институт стандартов и технологий (NIST).
- ^ «Системы времени и даты – время GPS» . Отдел океанографии НПС . Военно-морская аспирантура, кафедра океанографии. Архивировано из оригинала 02 января 2019 г. Проверено 18 февраля 2019 г.
- ^ «FIT SDK — Работа со значениями даты и времени» . garmin.com. 01.01.2023 . Проверено 25 февраля 2023 г.
- ^ «Гибкая и совместимая передача данных — протокол FIT» . garmin.com. 01.03.2019 . Проверено 25 февраля 2023 г.
- ^ «Форматы AppleSingle/AppleDouble для иностранных файлов. Примечание разработчика» (PDF) . Архивировано из оригинала (PDF) 17 июля 2011 г. Проверено 23 октября 2007 г.
- ^ «Документация PostgreSQL 9.1.24. Глава 8: Типы данных. 8.5. Типы даты/времени» . PostgreSQL.org . 27 октября 2016 г.
Примечание. Когда значения временных меток сохраняются в виде восьмибайтовых целых чисел (в настоящее время используется по умолчанию), точность до микросекунд доступна для всего диапазона значений. […] Значения временных меток сохраняются в секундах до или после полуночи 01.01.2000.
- ^ «Спецификация кластерной библиотеки ZigBee» . Раздел 2.5.2.21 UTCTime.
- ^ Лаборатория реактивного движения НАСА [@NASAJPL] (04.05.2021). «Сила сильна с этим малышом» ( Твит ) – через Твиттер .
- ^ «NeoGPS/src/NeoTime.cpp в мастере · SlashDevin/NeoGPS» . Гитхаб . Проверено 5 ноября 2023 г.
Внешние ссылки
[ редактировать ]- Критические и значимые даты (Дж. Р. Стоктон), обширный список дат, которые являются проблематичными для различных операционных систем и вычислительных устройств.
- Даты потенциальных проблем с компьютерами (pdf) Список дат потенциальных проблем с компьютерами и программным обеспечением с 2001 по 2100 год (IET).