Епоха — в інформатиці це дата, (або конкретний момент часу), з якого починається відлік часу в інформаційних системах. Більшість інформаційних систем обробляють час як кількість секунд (або інших інтервалів), які пройшли з початку конкретної дати та часу. Наприклад, 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 б формули, написані з урахуванням цієї помилки" (англ.a change now would disrupt formulas which were written to accommodate this anomaly).
Відоми епохи
У таблиці наведено епохи, які використовуються популярним програмним забезпеченням та іншими інформаційними системами.
Ця Epoch_(computing) містить неперекладені фрагменти англійською мовою. Ви можете допомогти проєкту, переклавши їх українською.
17 листопада 1858, 00:00:00 UT це початок так званого Модифікованого юліанського дня (англ.Modified Julian Day (MJD)), який використовується в астрономії[19]
Обраний тому що, якщо рахувати цей день нульовим, а і брати залишок по модулю 7, то це призведе до того що 0 це неділя, 1 це понеділок, 2 це вівторок, і так далі. Microsoft C/C++ для версії 7.0 намагався використовувати цей вибір, але відмовився в майбутньому.
Технічно 0 Січня 1900 це 31 Грудня 1899, але система не дозволяє використовувати дату раніше ніж 1900й рік. Але якщо урахувати що Lotus-1-2-3 вважав що 1900 це високосний рік, в той час як насправді це не високосний, то календарний "0 Січня 1900" це 30 Грудня 1899. Microsoft Excel заради сумісності з Lotus-1-2-3 реалізував цю помилку.
В першій версії мови програмування Ada дати були обмежені між 1901 та 2099, щоб спросити розрахунки і не натрапляти на помилку з тим що 1900 рік це не високосний рік. Але наступні реалізації залишили це задля зворотньої сумісності в системах які вже використовувались.[25]
Pick OS and variants (jBASE, Universe, Unidata, Revelation, Reality)
Обраний тому що, якщо рахувати цей день нульовим, а 1 Січня 1968 першим, і брати залишок по модулю 7 від номера дня, то це призведе до того що 0 це неділя, 1 це понеділок, 2 це вівторок, 3 це середа, 4 це четвер, 5 це п'ятниця, 6 це субота.[29]
↑Time Systems and Dates – GPS Time. Department of Oceanography, NPS. Naval Postgraduate School, Oceanography Department. Архів оригіналу за 2 січня 2019. Процитовано 18 лютого 2019.
↑PostgreSQL 9.1.24 Documentation. Chapter 8: Data Types. 8.5. Date/Time Types. PostgreSQL.org. 27 жовтня 2016. Note: When timestamp values are stored as eight-byte integers (currently the default), microsecond precision is available over the full range of values. […] timestamp values are stored as seconds before or after midnight 2000-01-01.