コンピューティングにおいて、エポックとは、コンピュータがシステム時間を測定する基準として使用される固定の日付と時刻です。ほとんどのコンピュータシステムは、時間を、特定の任意の日付と時刻から減算された秒数を表す数値として決定します。たとえば、UnixとPOSIXは、1970年1月1日木曜日00:00:00 UT (Unixエポックと呼ばれる時点)から経過した秒数として時間を測定します。C #プログラミング言語と、Windows 11およびWindows Server 2022までのWindows NTシステムでは、それぞれ西暦1年と西暦1601年の1月1日00:00:00 UTCから経過した100ナノ秒間隔の数として時間を測定し、それらの時点をそれらのシステムのエポックにします。[1] [2]コンピューティングのエポックは、ほとんどの場合、特定の日付の世界標準時 の真夜中として指定されます。
解決と表現
ソフトウェアの計時システムでは、時間測定の分解能が大きく異なります。1 日単位の時間を使用するシステムもあれば、ナノ秒単位を使用するシステムもあります。たとえば、1900 年 1 月 1 日の午前 0 時 (UTC) をエポック日とし、時間単位を 1 秒とすると、1900 年 1 月 1 日から 1900 年 1 月 2 日までの午前 0 時 (24:00) の時刻は、1 日の秒数である 86400 という数値で表されます。エポックより前の時刻を表す必要がある場合は、同じシステムを使用しますが、負の数を使用するのが一般的です。
このような時間の表現は、主に内部使用を目的としています。日付と時刻が人間の感覚で重要であるシステムでは、ソフトウェアはほとんどの場合、この内部数値を人間のカレンダーを表す日付と時刻に変換します。
問題点
コンピュータは、通常、任意の大きな数値を保存しません。代わりに、コンピュータによって保存される各数値には、固定量のスペースが割り当てられます。したがって、システムのエポックから経過した時間単位の数が、時間表現に割り当てられたスペースに収まる最大数を超えると、時間表現がオーバーフローし、問題が発生する可能性があります。オーバーフローが発生した後のシステムの動作は必ずしも予測可能ではありませんが、ほとんどのシステムでは、時間を表す数値がゼロにリセットされ、コンピュータ システムは、現在の時刻が再びエポック時刻であると認識します。
最も有名なのは、時間を 1900 年 1 月 1 日の紀元からの経過年数でカウントし、0 から 99 までの数字を格納するのに十分なスペースしか割り当てられていなかった古いシステムで、2000 年問題が発生したことです。これらのシステムでは (事前に修正されなければ) 2000 年 1 月 1 日を 1900 年 1 月 1 日と解釈し、2000 年の初めに予期しないエラーが発生します。
時間表現に多くのストレージを割り当てるシステムでも、この種のエラーから逃れることはできません。1970年 1 月 1 日のエポック日から経過した秒数として時間を維持し、 2 147 483 647もの大きな数値を格納できる十分なストレージを時間管理に割り当てる多くのUnix 系オペレーティング システムでは、2038 年 1 月 19 日にオーバーフロー問題が発生します。これは2038 年問題として知られています。
コンピューティングには、予測可能性や規則性がないうるう秒の計算など、より微妙な計時の問題が他にも存在します。さらに、歴史的な日付と時刻を表す必要があるアプリケーション (たとえば、ユリウス暦からグレゴリオ暦への切り替え前の日付を表す) では、専用の計時ライブラリを使用する必要があります。
最後に、一部のソフトウェアは、従来の時間管理システムに厳密に従って時間を管理していない古いソフトウェアとの互換性を維持する必要があります。たとえば、Microsoft Excel は、 Lotus 1-2-3の古いバージョンとのバグ互換性を維持するために、1900 年 2 月 29 日という架空の日付を監視します。[3] Lotus 1-2-3 はエラーのために日付を監視しました。エラーが発見されたときには、修正するには遅すぎました。「今変更すると、この異常に対応するために作成された数式が混乱します」。[4]
衛星ベースの時刻システムでは
衛星航法システムは少なくとも6つあり、そのすべてが時刻信号を送信することで機能している。地球規模の衛星システムは2つしかないが、そのうちGPSは時刻信号をエポックから計算するのに対し、GLONASSはUTCからのオフセットとして時間を計算しており、UTC入力はうるう秒に合わせて調整されている。地球規模のカバレッジを目指す他の2つのシステムのうち、ガリレオはエポックから計算し、北斗はうるう秒を調整せずにUTCから計算する。[5] [更新が必要か? ] GPSはUTC時間とGPS時間のオフセットも送信し、うるう秒があるたびにこのオフセットを更新する必要があり、GPS受信デバイスは更新を正しく処理する必要がある。対照的に、うるう秒はGLONASSユーザーにとって透過的である。エポックからUTCを計算する複雑さは、欧州宇宙機関のガリレオのドキュメントの「システムタイムスケールを基準タイムスケールに修正する方程式」で説明されている。[6]
コンピュータの重要な画期的な出来事
次の表は、一般的なソフトウェアやその他のコンピュータ関連システムで使用されるエポック日付の一覧です。これらのシステムでは、時間は、指定された時間 (通常は特定の日付の開始時の UTC の午前 0 時) から経過した特定の時間単位 (日、秒、ナノ秒など) の量として保存されます。
参照
注記
- ^ ab 先発グレゴリオ暦。
- ^ AmigaOS は時間を秒単位で計測し、それを符号付き 32 ビット整数で保存します。2046 年 1 月 19 日 03:14:07 以降、日付は負になります。最新の OS バージョン 4.1 (2016) では、この問題は修正されていません。
- ^ Epoch 関数は Unix Epoch を返すことに注意してください。SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '1970-01-01 00:00:00-00'); は 0 を返します。
参考文献
- ^ "[MS-DTYP]: FILETIME". Microsoft Docs . 2020-03-30.
- ^ ab "GregorianCalendar クラス". MSDN . 備考. 2015-04-26に取得。
- ^ abc Spolsky, Joel (2008-02-19). 「Microsoft Office のファイル形式が複雑なのはなぜか? (そしていくつかの回避策)」。2009-03-08に閲覧。
- ^ ダーショウィッツ、ナハム、ラインゴールド、エドワード(2008年)。暦計算(第3版)。ケンブリッジ大学出版局。pp. xxi、xxvi。ISBN 978-0-521-70238-6。
- ^ スビラナ、J. サンツ;ゾルノザ、JMフアン。エルナンデス・パハレス、M. (2011)。 「GNSS における時刻参照」。gssc.esa.int/navipedia。欧州宇宙機関。
- ^ 「GNSS タイムスケールの説明 Galileo」(PDF)。国際連合宇宙部。2016 年。セクション 5d。
- ^ "datenum"、MathWorks、2015年7月7日にアクセス。
- ^ 「DateTimeOffset 構造体」(.NET Framework 4.5)、MSDN、2015 年。
- ^ 「パッケージ時間」。golang.org 。 2015年4月26日閲覧。
- ^ 「日付 - z/OS TSO/E REXX 解説書」。IBM.com。IBM。2014年。SA32-0972-00。
- ^ ダーショウィッツ、ナハム、ラインゴールド、エドワード(2008)。「グレゴリオ暦」。暦計算(第 3 版)。ケンブリッジ大学出版局。ISBN 978-0-521-70238-6。
- ^ Cowlishaw, Mike Frederic (1990). The Rexx Language: A Practical Approach to Programming (第 2 版). Prentice Hall. pp. 93, 177. ISBN 0-13-780651-5。
- ^ 「Go 1 リリースノート - ライブラリの主な変更点 - Time」。golang.org。2012 年 3 月 28 日。2015 年 4 月 26 日閲覧。
- ^ 「日付と時刻の形式」。IBM.com。IBM。2020年1月24日閲覧。
- ^ 「CEEDATM - 秒数を文字タイムスタンプに変換する」 。z/ OS Language Environment プログラミング・リファレンス。IBM。2021-03-22 。
- ^ COBOL for AIXプログラミング ガイド バージョン 5.1 (PDF) (第 1 版)。IBM。2015年 6 月。CEEDATE - リリアン日付を文字形式に変換します。SC27-5404-00。
- ^ Leach, P.; Mealling, M.; Salz, R. (2005 年 7 月)。「RFC 4122: 提案された標準: ユニバーサル一意識別子 (UUID) URN 名前空間」。tools.ietf.org 。インターネット エンジニアリング タスク フォース。
- ^ ISO /IEC 1989:2014 - 情報技術 - プログラミング言語、その環境およびシステムソフトウェアインタフェース - プログラミング言語 COBOL。ISO。2014-06-01。p . 634。
- ^ ab Chen, Raymond (2009-03-06)。「Win32 エポックが 1601 年 1 月 1 日なのはなぜですか?」。The Old New Thing。MSDNブログ。
- ^ 「FILETIME 構造体 (minwinbase.h)」。Microsoft Docs。
- ^ 「1841年に何が起こったのか?」MテクノロジーとMUMPS言語FAQ、パート1/ 2。2015年8月28日時点のオリジナルよりアーカイブ。2015年8月14日閲覧。
- ^ Winkler, Gernot MR「修正ユリウス日」。米国海軍天文台。2013年2月14日時点のオリジナルよりアーカイブ。2015年1月29日閲覧。
- ^ "VMS 基準時間の原点". vms.tuwien.ac.at/info/humour。ウィーン工科大学。 2007 年 6 月 6 日のオリジナルからアーカイブ。
- ^ 「Google Sheets API の概要」。Google Developers。
- ^ 「国際デー番号」。help.dyalog.com 。 2018年11月27日閲覧。
- ^ 「時間管理」。msdn.microsoft.com。
- ^ 「1899 年 12 月 30 日を基準日とする背景にある物語は何ですか?」。social.msdn.microsoft.com。[永久リンク切れ ]
- ^ ab John Barnes . 「7.3 時刻と日付」。Ada 2005 の根拠。Ada リソース協会。
- ^ 「Excel の日付と時刻」cpearson.com。
- ^ 「MacTech – Apple テクノロジーのジャーナル」mactech.com。
- ^ 「SAS における日付と時刻の概要」(PDF)。
- ^ マーク・ピック、国際スペクトラム会議、2010年4月。
- ^ 「time_t – C++ リファレンス」 。2015年 4 月 6 日閲覧。
- ^ Barthel, Olaf (1998 年 9 月)。「ファイル: 2000 年問題と Amiga」。amiga.de。
- ^ Levine, Judah (2002-07-05). 「衛星を使用した時間と周波数の分布」(PDF) . Reports on Progress in Physics . 65 (8): 1119. Bibcode :2002RPPh...65.1119L. doi :10.1088/0034-4885/65/8/201 – 米国国立標準技術研究所 (NIST) 経由。
- ^ 「時間システムと日付 - GPS 時間」。海軍海洋学部。海軍大学院海洋学部。2019 年 1 月 2 日時点のオリジナルよりアーカイブ。2019年 2 月 18 日閲覧。
- ^ 「FIT SDK - 日付と時刻の値の操作」。garmin.com。2023年1月1日。 2023年2月25日閲覧。
- ^ 「柔軟で相互運用可能なデータ転送 - FIT プロトコル」。garmin.com。2019 年 3 月 1 日。2023 年 2 月 25 日閲覧。
- ^ 「AppleSingle/AppleDouble Formats for Foreign Files Developer's Note」(PDF)。2011-07-17 のオリジナル(PDF)からアーカイブ。2007-10-23に取得。
- ^ 「PostgreSQL 9.1.24 ドキュメント。第 8 章: データ型。8.5. 日付/時刻型」。PostgreSQL.org。2016-10-27。
注: タイムスタンプ値が 8 バイトの整数として保存される場合 (現在はデフォルト)、値の全範囲にわたってマイクロ秒の精度が使用可能です。[…] タイムスタンプ値は、2000-01-01 の午前 0 時からの秒数として保存されます。
- ^ 「ZigBee クラスタ ライブラリ仕様」セクション 2.5.2.21 UTCTime。
- ^ NASA JPL [@NASAJPL] (2021-05-04). 「この小さなものにフォースは強く宿っている」(ツイート)– Twitter経由。
- ^ "マスターの NeoGPS/src/NeoTime.cpp · SlashDevin/NeoGPS". GitHub 。2023 年 11 月 5 日に取得。
外部リンク
- 「Critical and Significant Dates (JR Stockton)」は、さまざまなオペレーティング システムやコンピューティング デバイスで問題となる日付の広範なリストです。
- コンピュータの潜在的な問題発生日 (pdf) 2001 年から 2100 年までのコンピュータとソフトウェアの潜在的な問題発生日のリスト (IET)。
