에포크 (컴퓨팅)

Epoch (computing)

컴퓨팅에서 에포크(epoch)는 컴퓨터가 시스템 시간을 측정하는 기준으로 사용되는 고정된 날짜와 시간입니다.대부분의 컴퓨터 시스템은 특정 임의 날짜 및 시간에서 제거된 시간(초)을 나타내는 숫자로 시간을 결정합니다.예를 들어, UnixPOSIXUnix epoch라고 알려진 시점인 1970년 1월 1일 목요일 00:00:00 UT 이후 시간을 초 단위로 측정합니다.Windows 11 Windows Server 2022를 포함한 Windows NT 시스템은 UTC 1월 1일 1601 00:00:00 이후로 경과한 100나노초 간격으로 시간을 측정합니다.[1]컴퓨팅 시대는 거의 항상 특정 날짜에 자정 세계 시간으로 지정됩니다.

해상도 및 표현

소프트웨어 타임 키핑 시스템은 시간 측정의 해상도에 있어서 매우 다양합니다. 어떤 시스템은 하루만큼 큰 시간 단위를 사용할 수도 있고 다른 시스템은 나노초를 사용할 수도 있습니다.예를 들어, 1900년 1월 1일 자정 UTC(00:00)의 에포크 날짜와 시간 단위가 1초인 경우, 1900년 1월 1일부터 1900년 1월 2일 사이의 자정(24:00) 시간은 숫자 86400으로 표시됩니다.시대 이전의 시대를 표현해야 할 때는 같은 시스템을 사용하는 것이 일반적이지만 음수를 사용합니다.

이러한 시간의 표현은 주로 내부용입니다.날짜와 시간이 인간의 의미에서 중요한 시스템에서 소프트웨어는 거의 항상 이 내부 숫자를 인간 달력을 나타내는 날짜와 시간으로 변환할 것입니다.

문제

컴퓨터는 일반적으로 임의로 큰 수를 저장하지 않습니다.대신에, 컴퓨터에 의해 저장된 각각의 숫자는 고정된 양의 공간을 할당 받습니다.따라서, 시스템의 시대 이후 경과된 시간 단위의 수가 시간 표현에 할당된 공간에 들어갈 수 있는 가장 큰 수를 초과하는 경우 시간 표현이 넘쳐 문제가 발생할 수 있습니다.오버플로가 발생한 후 시스템의 동작이 반드시 예측 가능한 것은 아니지만 대부분의 시스템에서 시간을 나타내는 숫자는 0으로 재설정되고 컴퓨터 시스템은 현재 시간이 다시 에포크 시간이라고 생각할 것입니다.

가장 유명한 것은 시간을 1900년 1월 1일의 시대 이후 경과한 해의 수로 계산하고 숫자 0부터 99까지 저장할 수 있는 충분한 공간만 할당한 오래된 시스템이 2000년 문제를 경험했다는 것입니다.이러한 시스템(사전에 수정되지 않은 경우)은 2000년 1월 1일을 1900년 1월 1일로 해석하여 2000년 초에 예측할 수 없는 오류를 발생시킵니다.

시간 표현에 더 많은 스토리지를 할당하는 시스템도 이러한 오류에 영향을 받지 않습니다.1970년 1월 1일의 에포크 날짜로부터 초 단위로 시간을 유지하고, 2147 483 647만큼 큰 숫자를 저장할 수 있을 만큼 충분한 시간을 할당하는 많은 유닉스 계열 운영 체제는 2038년 1월 19일에 오버플로 문제가 발생할 것입니다.이것은 2038년 문제로 알려져 있습니다.이러한 시스템에서 타임 키핑에 할당된 스토리지를 두 배로 늘리면 2900억 년 이상 후의 날짜를 나타낼 수 있습니다.

윤초를 계산하는 것과 같은 다른 미묘한 시간 기록 문제가 컴퓨팅에 존재하며, 이는 예측 가능성이나 규칙성으로 관찰되지 않습니다.또한 이전 날짜 및 시간(예: 율리우스력에서 그레고리안력으로 전환되기 전 날짜 표시)을 표시해야 하는 응용프로그램은 특수 시간 기록 라이브러리를 사용해야 합니다.

마지막으로, 일부 소프트웨어는 기존의 타임 키핑 시스템을 엄격하게 준수하지 않는 오래된 소프트웨어와의 호환성을 유지해야 합니다.예를 들어 Microsoft Excel은 이전 버전의 Lotus 1-2-3과버그 호환성을 유지하기 위해 1900년 2월 29일이라는 가상 날짜를 관찰합니다.[2]Lotus 1-2-3은 오류로 인해 날짜를 관찰했습니다. 오류가 발견되었을 때는 너무 늦어서 수정할 수 없었습니다. "이제 변경하면 이 문제를 해결하기 위해 작성된 공식에 차질이 생길 것입니다.[3]

위성 기반 시간 시스템에서

위성항법장치는 최소 6개가 있으며 모두 시간신호를 전송하는 방식으로 작동합니다.전역 커버리지를 가진 유일한 두 위성 시스템 중 GPS는 한 시대의 시간 신호를 계산하는 반면 GLONASSUTC로부터의 오프셋으로 시간을 계산하고 UTC 입력은 윤초로 조정됩니다.전 세계 커버리지를 목표로 하는 유일한 두 시스템 중 갈릴레오는 한 시대로부터 계산하고 베이두는 도약 초를 조정하지 않고 UTC로부터 계산합니다.[4][needs update?]GPS는 또한 UTC 시간과 GPS 시간 사이의 오프셋을 전송하며 윤초가 있을 때마다 이 오프셋을 업데이트해야 하므로 GPS 수신 장치가 업데이트를 올바르게 처리해야 합니다.반대로 윤초는 GLONASS 사용자에게 투명합니다.한 시대에서 UTC를 계산하는 복잡성은 유럽 우주국이 갈릴레오 문서에서 "시스템 시간 척도를 기준 시간 척도로 수정하기 위한 방정식"에 따라 설명합니다.[5]

컴퓨팅 분야에서 주목할 만한 시대상

다음 표는 인기 있는 소프트웨어 및 기타 컴퓨터 관련 시스템에서 사용되는 에포크 날짜를 나열합니다.이러한 시스템의 시간은 지정된 시간(일반적으로 지정된 날짜의 시작에서 자정 UTC) 이후 경과된 특정 시간 단위(일, 초, 나노초 등)의 양으로 저장됩니다.

에포크 날짜 주목할 만한 용도 선택근거
1월0일 기원전 1년[nb1] 매트랩[6] ISO 8601의 "0년"
서기 1월 1일[nb 1] 마이크로소프트.NET,[7][8] Go,[9] REXX,[10] Rata Die[11] Common Era, ISO 2014,[12] RFC 339[13]
1582년10월14일 SPSS,[14] IBM z/OS Language Environment,[15] IBM AIX COBOL[16] 아래와 동일하지만, 원-베이스 인덱싱을 사용합니다.
1582년10월15일 UUID 버전 1 그레고리안에서 기독교 달력으로 개혁된 날짜.[17]
1601년1월1일 NTFS, COBOL,[18] Win32/Win64(NT 시간대)[19][20] 1601년은 윈도우 NT가 만들어졌을 때 400년 그레고리안력 주기의 첫 해였습니다.[19]
1840년 12월 31일 MOUMS 프로그래밍 언어 1841년은 언어가 고안되었을 때 살아있는 미국 시민 중 가장 나이가 많은 사람이 태어난 해가 되기 몇 년 전에 도약하지 않은 해였습니다.[21]
1858년11월17일 VMS, 미국 해군 천문대, DVBSI 16비트 데이 스탬프, 기타 천문학 관련 계산[22] 1858년 11월 17일 00:00:00 UT는 율리우스력 2400000.5에[23] 해당하는 수정 율리안 데이(MJD)의 0입니다.
1899년12월30일 Microsoft COM DATE, Object Pascal, LibreOffice Calc, Google 시트[24] Lotus 1-2-3과의 호환성을 위해 Microsoft Excel에서 사용하는 기술적 내부 값.[2]
1899년12월31일 Dyalog APL,[25] Microsoft C/C++ 7.0[26] (날짜 모드 7)이 0=sunday, 1=monday, 2=화요일, 3=wednesday, 4=thursday, 5=금요일, 6=토요일을 생성하도록 선택합니다.마이크로소프트의 비시각적 C/C++의 마지막 버전이 이를 사용했지만, 그 뒤로 되돌아갔습니다.
1900년1월0일 Microsoft Excel,[2] Lotus 1-2-3[27] 논리적으로 1900년 1월 0일은 1899년 12월 31일에 해당하지만, 이러한 시스템은 사용자가 후자의 날짜를 지정할 수 없습니다.1900년이 윤년으로 잘못 취급되기 때문에 1900년 1월 0일은 역사적 날짜인 1899년 12월 30일에 해당합니다.
1900년1월1일 IMT2000 3GPP - 네트워크 시간 프로토콜, IBM CICS, Mathematica, RISC OS, VME, Common Lisp, Michigan Terminal System
1901년1월1일 에이다[28] 언어의 첫 번째 버전에서는 400년 윤년 규칙의 영향을 받는 해를 피하기 위해 1901년에서 2099년 사이로 날짜가 제한되었습니다.이후 버전에서 상한을 확장할 때 하한을 동일하게 유지하여 기준으로 사용한 시스템과의 하위 호환성을 유지했습니다.[28]
1904년1월1일 LabVIEW, Apple Inc.클래식 Mac OS, JMP Scripting Language, Palm OS, MP4, Microsoft Excel(선택 사항),[29] IGOR Pro 1904년은 20세기의 첫 윤년입니다.[30]
1960년1월1일 SAS 시스템[31]
1967년12월31일 OS 및 변형 선택(jBASE, Universe, Unidata, Revealation, Reality) (날짜 모드 7)이 0=sunday, 1=monday, 2=화요일, 3=wednesday, 4=thursday, 5=금요일, 6=토요일을 생성하도록 선택합니다.
1970년1월1일 POSIX 시간에 사용되는 유닉스 에포크, 유닉스 계열 시스템(리눅스, macOS, 안드로이드) 및 프로그래밍 언어: 대부분의 C/C++ 구현,[33] 자바, 자바스크립트, , PHP, 파이썬, 루비, Tcl, 액션스크립트.Precision Time Protocol(Precision Time Protocol)에서도 사용됩니다.
1978년1월1일 아미가OS.[34][nb 2]코모도어 아미가 하드웨어 시스템은 1985년에서 1994년 사이에 도입되었습니다.최신 OS 버전 4.1 (2016년 12월)AROS, MorphOS.
1980년1월1일 IBM BIOS INT 1Ah, DOS, OS/2, FAT12, FAT16, FAT32, exFAT 파일 시스템, ZIP 포맷 및 파생 제품 1980년에서 1981년 사이에 개발되어 도입된 PC는 BIOS, 86-DOS, MS-DOS, PC DOS와 FAT12 파일 시스템을 포함하고 있습니다.
1980년1월6일 Qualcomm BREW, GPS, ATSC 32비트 타임스탬프 GPS는 주(한 주는 일요일에 시작하도록 정의됨)를 계산하며, 1월 6일은 1980년의 첫 일요일입니다.[35][36]
1989년12월31일 가민 핏 에포크.[37]Garmin이 FIT Protocol의 일부로 고안한 표준으로, 피트니스 기기 업계에서 많은 사람들이 사실상의 표준으로 채택해 왔습니다.[38]
2000년1월1일 AppleSingle, AppleDouble,[39] PostgreSQL,[40][nb 3] Zigbee UTCTime,[41] Ingenuity 헬리콥터[42]
2001년1월1일 Apple코코아 프레임워크의 NSDate, NeXTSTEP 서기 3천년의 첫날.

참고 항목

메모들

  1. ^ a b 프롤레틱 그레고리안력.
  2. ^ 아미가OS는 초 단위로 시간을 측정하고 부호가 붙은 32비트 정수에 저장합니다.2046년 1월 19일 03:14:07 이후 날짜는 부정적입니다.최신 OS 버전 4.1(2016)에는 이에 대한 수정 사항이 없습니다.
  3. ^ Epoch 함수는 unix Epoch SELECT EXCT(EPOCH FROM TIMESTAMPS WITH TIME ZONE '1970-01-01 00:00:00-00')를 반환하며, 0을 반환합니다.

참고문헌

  1. ^ "[MS-DTYP]: FILETIME". Microsoft Docs. 2020-03-30.
  2. ^ a b c Spolsky, Joel (2008-02-19). "Why are the Microsoft Office file formats so complicated? (And some workarounds)". Retrieved 2009-03-08.
  3. ^ Dershowitz, Nachum; Reingold, Edward (2008). Calendrical Calculations (3 ed.). Cambridge University Press. pp. xxi, xxvi. ISBN 978-0-521-70238-6.
  4. ^ Subirana, J. Sanz; Zornoza, J. M. Juan; Hernández-Pajares, M. (2011). "Time References in GNSS". gssc.esa.int/navipedia. European Space Agency.
  5. ^ "GNSS Timescale Description Galileo" (PDF). United Nations Office for Outer Space Affairs. 2016. Section 5d.
  6. ^ "datenum", MathWorks, 2015년 7월 7일 접속.
  7. ^ "GregorianCalendar Class". MSDN. Remarks. Retrieved 2015-04-26.
  8. ^ "날짜 시간 간격띄우기 구조"(.)NET Framework 4.5), MSDN, 2015.
  9. ^ "Package time". golang.org. Retrieved 2015-04-26.
  10. ^ "Date—z/OS TSO/E REXX Reference". IBM.com. IBM. 2014. SA32-0972-00.
  11. ^ Dershowitz, Nachum; Reingold, Edward (2008). "The Gregorian calendar". Calendrical Calculations (3 ed.). Cambridge University Press. ISBN 978-0-521-70238-6.
  12. ^ Cowlishaw, Mike Frederic (1990). The Rexx Language: A Practical Approach to Programming (2 ed.). Prentice Hall. pp. 93, 177. ISBN 0-13-780651-5.
  13. ^ "Go 1 Release Notes—Major changes to the library—Time". golang.org. 2012-03-28. Retrieved 2015-04-26.
  14. ^ "Date and Time Formats". IBM.com. IBM. Retrieved 2020-01-24.
  15. ^ "CEEDATM—Convert seconds to character timestamp". z/OS Language Environment Programming Reference. IBM. 2021-03-22.
  16. ^ COBOL for AIX Programming Guide Version 5.1 (PDF) (First ed.). IBM. June 2015. CEEDATE—convert Lilian date to character format. SC27-5404-00.
  17. ^ 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.
  18. ^ ISO/IEC 1989:2014 - Information technology — Programming languages, their environments and system software interfaces — Programming language COBOL. ISO. 2014-06-01. p. 634.
  19. ^ a b Chen, Raymond (2009-03-06). "Why is the Win32 epoch January 1, 1601?". The Old New Thing. MSDN Blogs.
  20. ^ "FILETIME structure (minwinbase.h)". Microsoft Docs.
  21. ^ "What happened in 1841?". M Technology and MUMPS Language FAQ, Part 1/2. Archived from the original on 2015-08-28. Retrieved 2015-08-14.
  22. ^ Winkler, Gernot M. R. "Modified Julian Date". U.S. Naval Observatory. Archived from the original on 2013-02-14. Retrieved 2015-01-29.
  23. ^ "VMS base time origin". vms.tuwien.ac.at/info/humour. Technische Universität Wien. Archived from the original on 2007-06-06.
  24. ^ "Introduction to the Google Sheets API". Google Developers.
  25. ^ "International Day Number". help.dyalog.com. Retrieved 2018-11-27.
  26. ^ "Time Management". msdn.microsoft.com.
  27. ^ "What is story behind December 30, 1899 as base date?". social.msdn.microsoft.com.[영구 데드링크]
  28. ^ a b John Barnes. "7.3 Times and dates". Rationale for Ada 2005. Ada Resource Association.
  29. ^ "Dates And Times In Excel". cpearson.com.
  30. ^ "MacTech – The journal of Apple technology". mactech.com.
  31. ^ "Introduction to Dates and Times in SAS" (PDF).
  32. ^ Mark Pick, International Spectrum Conference 2010 April.
  33. ^ "time_t – C++ Reference". Retrieved 2015-04-06.
  34. ^ Barthel, Olaf (September 1998). "File: The Year 2000 Problem and the Amiga". amiga.de.
  35. ^ Levine, Judah (2002-07-05). "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 – via National Institute of Standards and Technology (NIST).
  36. ^ "Time Systems and Dates – GPS Time". Department of Oceanography, NPS. Naval Postgraduate School, Oceanography Department. Archived from the original on 2019-01-02. Retrieved 2019-02-18.
  37. ^ "FIT SDK - Working with Date Time Values". garmin.com. 2023-01-01. Retrieved 2023-02-25.
  38. ^ "Flexible and Interoperable Data Transfer - FIT Protocol". garmin.com. 2019-03-01. Retrieved 2023-02-25.
  39. ^ "AppleSingle/AppleDouble Formats for Foreign Files Developer's Note" (PDF). Archived from the original (PDF) on 2011-07-17. Retrieved 2007-10-23.
  40. ^ "PostgreSQL 9.1.24 Documentation. Chapter 8: Data Types. 8.5. Date/Time Types". PostgreSQL.org. 2016-10-27. 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.
  41. ^ "ZigBee Cluster Library Specification". Section 2.5.2.21 UTCTime.
  42. ^ NASA JPL [@NASAJPL] (2021-05-04). "The Force is strong with this little one" (Tweet) – via Twitter.

외부 링크