Епоха (інформатика)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

епоха — в інформатиці це дата, (або конкретний момент часу), з якого починається відлік часу в інформаційних системах. Більшість інформаційних систем обробляють час як кількість секунд (або інших інтервалів), які пройшли з початку конкретної дати та часу. Наприклад, 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 використовувала цю дату через помилку; на той час, коли помилку було виявлено, було вже занадто пізно її виправляти, тому що забагато "виправлення помилки поламала б формули, написані з урахуванням цієї помилки".

Відоми епохи[ред. | ред. код]

У таблиці наведено епохи, які використовуються популярним програмним забезпеченням та іншими інформаційними системами.

Дата початку епохи Значущі приклади використання Обґрунтування вибору
0 січня 1 рік MATLAB[1] Нульвий рік в ISO 8601
1 Січня 1 року Microsoft .NET,[2][3] Go,[4] REXX,[5] Rata Die[6] Common Era, ISO 2014,[7] RFC 3339[8]
14 Жовтня 1582 SPSS,[9] IBM z/OS,[10] IBM AIX COBOL[11] На один день раніше, ніж дата коли відбулось прийняття григоріанського календаря
15 Жовтня 1582 UUID version 1

Дата коли відбулось прийняття григоріанського календаря [12]

1 Січня 1601 NTFS, COBOL,[13] Win32/Win64 (NT time epoch)[14][15] 1601 - це перший повний 400-річний цикл григорианського календаря, який був реалізований в Windows NT[14]
1 Січня 1753 Sybase ASE, Microsoft SQL Server

Під час прийняття григорианського календаря у Великій Британії випали дати між 3 вересня 1752 та 13 вересня 1752 року. Щоб спростити роботу з датами, були обмежені дати до 1753 року.[16]

31 Грудня 1840 Мова програмування MUMPS 1841 був найменьший невисокосний рік, який був меньше ніж дата народження найстаршої людини в США, коли цю мову розробляли[17]
17 Листопада 1858 VMS, United States Naval Observatory, DVB та інші системи, що використовують 16-бітні добові відмітки для потреб астрономії[18] 17 листопада 1858, 00:00:00 UT це початок так званого Модифікованого юліанського дня (англ. Modified Julian Day (MJD)), який використовується в астрономії[19]
30 Грудня 1899 Microsoft COM DATE, Object Pascal, LibreOffice Calc, Google Sheets[20] Microsoft Excel технічно використовує це значення заради сумісності з Lotus 1-2-3. [21]
31 Грудня 1899 Dyalog APL,[22] Microsoft C/C++ 7.0[23] Обраний тому що, якщо рахувати цей день нульовим, а і брати залишок по модулю 7, то це призведе до того що 0 це неділя, 1 це понеділок, 2 це вівторок, і так далі. Microsoft C/C++ для версії 7.0 намагався використовувати цей вибір, але відмовився в майбутньому.
0 Січня 1900 Microsoft Excel,[21] Lotus 1-2-3[24] Технічно 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[25]

В першій версії мови програмування Ada дати були обмежені між 1901 та 2099, щоб спросити розрахунки і не натрапляти на помилку з тим що 1900 рік це не високосний рік. Але наступні реалізації залишили це задля зворотньої сумісності в системах які вжу використовувались.[25]

1 Січня 1904 LabVIEW, Apple Inc.'s classic Mac OS, JMP Scripting Language, Palm OS, MP4, Microsoft Excel (optionally),[26] IGOR Pro 1904 - це перший високосний рік в 20-му сторіччі.[27]
1 Січня 1960 SAS System[28]
31 Грудня 1967 Pick OS and variants (jBASE, Universe, Unidata, Revelation, Reality) Обраний тому що, якщо рахувати цей день нульовим, а 1 Січня 1968 першим, і брати залишок по модулю 7 від номера дня, то це призведе до того що 0 це неділя, 1 це понеділок, 2 це вівторок, 3 це середа, 4 це четвер, 5 це п'ятниця, 6 це субота. [29]
1 Січня 1970 Unix Epoch, використовується в Unix-подібні операційні системах та в великій кількості мов програмування: більшості реалізацій C/C++,[30] Java, JavaScript, Perl, PHP, Python, Ruby, Tcl, ActionScript. Також використовується в Precision Time Protocol.
1 Січня 1978 AmigaOS.[31] 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 січня.[32][33]
31 December 1989 Епоха Garmin FIT.[34] Стандарт який започаткувала Garmin as як частина свого FIT протоколу, який використовується в індустрії фінтес пристроїв.[35]
1 Січня 2000

формати,[36] PostgreSQL,[37]Zigbee UTCTime,[38] вертоліт Ingenuity[39]||Епоха Y2K.

1 Січня 2001 NSDate в Apple Cocoa, NeXTSTEP Перший день третього тисячоліття.

Дивись також[ред. | ред. код]

Джерела[ред. | ред. код]

  1. "datenum", MathWorks, accessed 7 July 2015.
  2. GregorianCalendar Class. MSDN. Remarks. Процитовано 26 April 2015.
  3. "DateTimeOffset Structure" (.NET Framework 4.5), MSDN, 2015.
  4. Package time. golang.org. Процитовано 26 April 2015.
  5. Date—z/OS TSO/E REXX Reference. IBM.com. IBM. 2014. SA32-0972-00.
  6. Dershowitz, Nachum; Reingold, Edward (2008). The Gregorian calendar. Calendrical Calculations (вид. 3). Cambridge University Press. ISBN 978-0-521-70238-6.
  7. Cowlishaw, Mike Frederic (1990). The Rexx Language: A Practical Approach to Programming (вид. 2). Prentice Hall. с. 93, 177. ISBN 0-13-780651-5.
  8. Go 1 Release Notes—Major changes to the library—Time. golang.org. 28 March 2012. Процитовано 26 April 2015.
  9. Date and Time Formats. IBM.com. IBM. Процитовано 24 January 2020.
  10. CEEDATM—Convert seconds to character timestamp. z/OS Language Environment Programming Reference. IBM. 22 березня 2021.
  11. COBOL for AIX Programming Guide Version 5.1 (PDF) (вид. First). IBM. June 2015. CEEDATE—convert Lilian date to character format. SC27-5404-00.
  12. Leach, P.; Mealling, M.; Salz, R. (July 2005). RFC 4122: Proposed Standard: A Universally Unique IDentifier (UUID) URN Namespace. tools.ietf.org. Internet Engineering Task Force.
  13. Шаблон:Cite ISO standard
  14. а б Chen, Raymond (6 March 2009). Why is the Win32 epoch January 1, 1601?. The Old New Thing. MSDN Blogs.
  15. FILETIME structure (minwinbase.h). Microsoft Docs.
  16. https://stackoverflow.com/questions/3310569/what-is-the-significance-of-1-1-1753-in-sql-server/3310588#3310588
  17. What happened in 1841?. M Technology and MUMPS Language FAQ, Part 1/2. Архів оригіналу за 28 August 2015. Процитовано 14 August 2015.
  18. Winkler, Gernot M. R. Modified Julian Date. U.S. Naval Observatory. Архів оригіналу за 14 February 2013. Процитовано 29 January 2015.
  19. VMS base time origin. vms.tuwien.ac.at/info/humour. Technische Universität Wien. Архів оригіналу за 6 June 2007.
  20. Introduction to the Google Sheets API. Google Developers.
  21. а б Spolsky, Joel (19 February 2008). Why are the Microsoft Office file formats so complicated? (And some workarounds). Процитовано 8 March 2009.
  22. International Day Number. help.dyalog.com (en-gb) . Процитовано 27 November 2018.
  23. Time Management. msdn.microsoft.com.
  24. What is story behind December 30, 1899 as base date?. social.msdn.microsoft.com.[недоступне посилання з 01.12.2019]
  25. а б John Barnes. 7.3 Times and dates. Rationale for Ada 2005. Ada Resource Association.
  26. Dates And Times In Excel. cpearson.com.
  27. MacTech – The journal of Apple technology. mactech.com.
  28. Introduction to Dates and Times in SAS (PDF).
  29. Mark Pick, International Spectrum Conference April 2010.
  30. time_t – C++ Reference. Процитовано 6 April 2015.
  31. Barthel, Olaf (September 1998). File: The Year 2000 Problem and the Amiga. amiga.de.
  32. Levine, Judah (5 July 2002). Time and frequency distribution using satellites (PDF). Reports on Progress in Physics. 65 (8): 1119. Bibcode:2002RPPh...65.1119L. doi:10.1088/0034-4885/65/8/201 — через National Institute of Standards and Technology (NIST).
  33. Time Systems and Dates – GPS Time. Department of Oceanography, NPS. Naval Postgraduate School, Oceanography Department. Архів оригіналу за 2 January 2019. Процитовано 18 February 2019.
  34. FIT SDK - Working with Date Time Values. garmin.com. 1 January 2023. Процитовано 25 February 2023.
  35. Flexible and Interoperable Data Transfer - FIT Protocol. garmin.com. 1 March 2019. Процитовано 25 February 2023.
  36. AppleSingle/AppleDouble Formats for Foreign Files Developer's Note (PDF). Архів оригіналу (PDF) за 17 July 2011. Процитовано 23 October 2007.
  37. PostgreSQL 9.1.24 Documentation. Chapter 8: Data Types. 8.5. Date/Time Types. PostgreSQL.org. 27 October 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.
  38. ZigBee Cluster Library Specification. Section 2.5.2.21 UTCTime.
  39. NASA JPL [@NASAJPL] (4 травня 2021). The Force is strong with this little one (Твіт) — через Твіттер.