Епоха — в інформатиці це дата, (або конкретний момент часу), з якого починається відлік часу в інформаційних системах. Більшість інформаційних систем обробляють час як кількість секунд (або інших інтервалів), які пройшли з початку конкретної дати та часу. Наприклад, Unix і POSIX вимірюють час як кількість секунд, що минули з 1 січня 1970 року, 00:00:00. моменту часу, відомого як епоха Unix. Системи Windows NT, (до Windows 11 і Windows Server 2022 включно), вимірюють час як кількість 100-наносекундних інтервалів, які минули з 1 січня 1601 00:00:00 UTC, що робить цей момент часу епохою для цих систем. Майже всі епохи починаються з початку доби (00:00:00) по всесвітньому часовому поясу певної дати.
Представлення В програмному забезспеченні мінімальна одиниця часу може суттєво відрізнятись. Деякі системи можуть використовувати одиниці часу величиною до доби, тоді як інші можуть оперувати наносекундами.
Наприклад, для епохи що починається опівночі (1 січня 1900 року 00:00 UTC) та одиниці часу в одну секунду, через добу (2 січня 1900 року 00:00) час буде представлений числом 86400, що відповідає кількості секунд в одній добі. Коли потрібно відобразити час до епохи, часто використовують ту саму систему, але з від'ємними числами.
Таке представлення часу призначене головним чином для внутрішнього використання. У системах, де дата і час є важливими для споживання людиною, програмне забезпечення майже завжди перетворюватиме це внутрішнє число на дату і час, що відповідають звичайному календарю.
Проблеми Комп'ютери, як правило, не зберігають довільно (безмежно) великих чисел. Натомість кожному числу, що зберігається комп'ютером, виділяється фіксований обсяг пам'яті. Тому проблема переповнення цілого може призвести до проблем. Поведінка системи після переповнення не завжди передбачувана. У більшості систем значення, що представляє час, скидається до нуля, і комп'ютерна система вважатиме, що поточний час знову є часом епохи.
Найвідомішим прикладом є проблема 2000 року, з якою зіштовхнулися старіші системи, що відраховували час, а саме рік - к кількість років, що минули з епохи 1 січня 1900 року. Але спроектовані так, що виділеного під рік лише 2 числа, від 0 до 99. (наприклад 01.01.70). Ці системи (якщо їх не було попередньо скориговано) інтерпретували б дату 1 січня 2000 року як 1 січня 1900 року, що призвело до непередбачуваних помилок на початку 2000 року.
Навіть системи, що виділяють більше пам'яті для представлення часу, не застраховані від подібних помилок.
системи що ведуть облік часу від початку епохи 1 січня 1970 року, і виділяють 32 бітне ціле для зберігання чисел, зіткнуться з проблемою переповнення цілого 19 січня 2038 року. Ця проблема получила назву проблема 2038 року.
Існують й інші, більш тонкі проблеми обліку часу в інформаційних системах. Наприклад, врахування високосних секунд, які не мають чіткої періодичності. Крім того, додатки, яким потрібно представляти історичні дати та час (наприклад, відображення дати до переходу з юліанського календаря на григоріанський), повинні використовувати спеціалізовані бібліотеки обліку часу.
Деяке програмне забезпечення повинне підтримувати зворотну сумісність зі старішим програмним забезпеченням, яке не веде відлік часу строго відповідно до традиційних систем. Наприклад, програма Microsoft Excel використовує хибну дату 29 лютого 1900 року для підтримки сумісності з помилками старіших версій Lotus 1-2-3. Lotus 1-2-3 використовувала цю дату через помилку; на момент виявлення помилки було вже занадто пізно її виправляти, тому що "виправлення помилки поламалj б формули, написані з урахуванням цієї помилки" ().
Відоми епохи У таблиці наведено епохи, які використовуються популярним програмним забезпеченням та іншими інформаційними системами.
Дата початку епохи Значущі приклади використання Обґрунтування вибору 0 січня 1 рік MATLAB Нульовий рік в ISO 8601 1 Січня 1 року Microsoft.NET, Go, REXX, Rata Die Common Era, ISO 2014, RFC 3339 14 Жовтня 1582 SPSS, IBM z/OS, IBM AIX COBOL На один день раніше, ніж дата коли відбулось прийняття григоріанського календаря 15 Жовтня 1582 UUID version 1 Дата коли відбулось прийняття григоріанського календаря 1 Січня 1601 NTFS, COBOL, Win32/Win64 (NT time epoch) 1601 - це перший повний 400-річний цикл григорианського календаря, який був реалізований в Windows NT 1 Січня 1753 Sybase ASE, Microsoft SQL Server Під час прийняття григорианського календаря у Великій Британії випали дати між 3 вересня 1752 та 13 вересня 1752 року. Щоб спростити роботу з датами, були обмежені дати до 1753 року.https://stackoverflow.com/questions/3310569/what-is-the-significance-of-1-1-1753-in-sql-server/3310588#3310588 31 Грудня 1840 Мова програмування MUMPS 1841 був найменьший невисокосний рік, який був меньше ніж дата народження найстаршої людини в США, коли цю мову розробляли 17 Листопада 1858 VMS, United States Naval Observatory, DVB та інші системи, що використовують 16-бітні добові відмітки для потреб астрономії 17 листопада 1858, 00:00:00 UT це початок так званого Модифікованого юліанського дня (), який використовується в астрономії 30 Грудня 1899 Microsoft COM DATE, Object Pascal, LibreOffice Calc, Google Sheets Microsoft Excel технічно використовує це значення заради сумісності з Lotus 1-2-3. 31 Грудня 1899 Dyalog APL, Microsoft C/C++ 7.0 Обраний тому що, якщо рахувати цей день нульовим, а і брати залишок по модулю 7, то це призведе до того що 0 це неділя, 1 це понеділок, 2 це вівторок, і так далі. Microsoft C/C++ для версії 7.0 намагався використовувати цей вибір, але відмовився в майбутньому. 0 Січня 1900 Microsoft Excel, Lotus 1-2-3 Технічно 0 Січня 1900 це 31 Грудня 1899, але система не дозволяє використовувати дату раніше ніж 1900й рік. Але якщо урахувати що Lotus-1-2-3 вважав що 1900 це високосний рік, в той час як насправді це не високосний, то календарний "0 Січня 1900" це 30 Грудня 1899. Microsoft Excel заради сумісності з Lotus-1-2-3 реалізував цю помилку. 1 Січня 1900 Network Time Protocol, IBM CICS, Mathematica, RISC OS, VME, Common Lisp, Michigan Terminal System 1 Січня 1901 Ada В першій версії мови програмування Ada дати були обмежені між 1901 та 2099, щоб спросити розрахунки і не натрапляти на помилку з тим що 1900 рік це не високосний рік. Але наступні реалізації залишили це задля зворотньої сумісності в системах які вже використовувались. 1 Січня 1904 LabVIEW, Apple Inc.'s classic Mac OS, JMP Scripting Language, Palm OS, MP4, Microsoft Excel (optionally), IGOR Pro 1904 - це перший високосний рік в 20-му сторіччі. 1 Січня 1960 SAS System 31 Грудня 1967 Pick OS and variants (jBASE, Universe, Unidata, Revelation, Reality) Обраний тому що, якщо рахувати цей день нульовим, а 1 Січня 1968 першим, і брати залишок по модулю 7 від номера дня, то це призведе до того що 0 це неділя, 1 це понеділок, 2 це вівторок, 3 це середа, 4 це четвер, 5 це п'ятниця, 6 це субота. 1 Січня 1970 Unix Epoch, використовується в Unix-подібні операційні системах та в великій кількості мов програмування: більшості реалізацій C/C++, Java, JavaScript, Perl, PHP, Python, Ruby, Tcl, ActionScript. Також використовується в Precision Time Protocol. 1 Січня 1978 AmigaOS. AROS, MorphOS. 1 Січня 1980 IBM BIOS INT 1Ah, DOS, OS/2, FAT12, FAT16, FAT32, exFAT filesystems, ZIP архіви та їх похідні IBM PC разом з їх BIOS а також 86-DOS, MS-DOS and PC DOS разом з її файловою системою FAT12 були розроблені та між 1980 та 1981. 6 Січня 1980 Binary Runtime Environment for Wireless платформа для розробки від Qualcomm, GPS, ATSC з 32-бітними часовими відмітками GPS рахує тижні, а з урахуванням якщо тиждень починається з неділі, то перша неділя 1980 це було 6 січня. 31 December 1989 Епоха Garmin FIT. Стандарт який започаткувала Garmin as як частина свого FIT протоколу, який використовується в індустрії фінтес пристроїв. 1 Січня 2000 формати, PostgreSQL,Zigbee UTCTime, вертоліт Ingenuity||Епоха Y2K. 1 Січня 2001 NSDate в Apple Cocoa, NeXTSTEP Перший день третього тисячоліття.
Дивись також
Системний час Час Unix
Джерела
AppleSingle та AppleDouble