コンピュータで使用される時間の表現
Unixの 日付 コマンド
コンピューティング において 、 システム時間は コンピュータ システムの 時点 の概念を表します。
システム時間は、システム クロック によって測定されます。システム クロック は通常、 エポック と呼ばれる任意の開始日から経過した ティック の数を単純にカウントする形で実装されています。たとえば、 Unix および POSIX準拠のシステムでは、 うるう秒 を除いて、 1970 年 1 月 1 日 00:00:00 UTの Unix エポック の開始から経過した秒数として システム時間 (「 Unix 時間」) をエンコードします。Windows 9x や Windows NT など、 32 ビット版と 64 ビット版の Windows API を実装しているシステムでは、年/月/日/時/分/秒/ミリ秒の値として表される SYSTEMTIMEと、 先発グレゴリオ暦 で計算された 1601 年 1 月 1 日 00:00:00 UT からの 100 ナノ秒ティックの数として表される FILETIME の両方でシステム時間を提供します 。
システム時刻は、人間にとってより理解しやすい形式であるカレンダー時刻 に変換できます 。例えば、 Unixシステム時刻 (エポック開始から 1 000 000 000 秒)は、カレンダー時刻(2001年9月9日 01:46:40 UT) に変換されます。このような変換を処理するライブラリ サブルーチンは、 タイムゾーン 、 夏時間 (DST)、うるう秒、およびユーザーの ロケール 設定の調整も処理できます 。また、カレンダー時刻をシステム時刻に変換するライブラリルーチンも一般的に提供されています。
現在システム時刻を32ビット整数値として保存している多くの実装は、差し迫った 2038年問題 などの問題に悩まされることになります。これらの時刻値は、システム時刻のエポックの終了後にオーバーフロー(「ビット不足」)し、 ソフトウェアおよびハードウェアのエラーにつながります。これらのシステムには、以前の 2000年問題の 解決に必要だった取り組みと同様の、何らかの形の修復が必要になります。これは 、32ビット値として保存されたシステムタイムスタンプを含む
既存の データファイル形式 にとっても、潜在的にはるかに大きな問題となる可能性があります。
その他の時間測定
システム時間と密接に関連しているのが プロセス時間 です。これは、実行中のプロセス によって消費される CPU 時間の合計です。これは ユーザー CPU時間と システム CPU時間に分けられ、それぞれユーザーコードとシステム カーネル コードの実行に費やされた時間を表します。プロセス時間はCPU 命令 または クロックサイクル に要した時間の合計であり、通常、 ウォールタイム とは直接的な相関関係はありません 。
ファイル システムは 、各 ファイル および ディレクトリの ファイル制御ブロック (または inode )に タイムスタンプ を保存することによって、ファイルが作成、変更、またはアクセスされた時刻を追跡します 。
歴史
第一世代の パーソナルコンピュータの ほとんどは、日付と時刻を記録していませんでした。これには、 CP/Mオペレーティングシステムを搭載したシステム、 Apple II 、 BBC Micro 、 Commodore PET などの初期モデルが含まれます。IBM PC および XT では、 オンボード バッテリバックアップ付きの リアルタイムクロック チップを搭載した アドオン 周辺ボード が利用可能でしたが、 マザーボード に日付/時刻ハードウェアを内蔵した最初の普及型PCは IBM ATでした。 コンピュータネットワーク が広く普及する以前は、システム時刻を記録していたほとんどのパーソナルコンピュータシステムは 現地時間 のみに基づいており、異なる タイムゾーン を考慮していませんでした 。
現在の技術では、ほとんどの最新コンピューターが現地の常用時を追跡しており、 VCR 、 DVR 、 ケーブルテレビ受信機 、 PDA 、 ポケベル 、 携帯電話 、 ファックス機 、留守番電話 、 カメラ、 カムコーダー 、 セントラルエアコン 、 電子レンジ など、他の多くの家庭用および 個人用 デバイスも同様です。
組み込みシステム ( Raspberry Pi 、 Arduino 、その他の 類似システム など)内で動作する マイクロコントローラは、 必ずしも時刻を追跡するための内部ハードウェアを備えているわけではありません。このようなコントローラシステムの多くは、外部時刻を意識することなく動作します。外部時刻情報を必要とするシステムでは、通常、 再起動時に タイムサーバー や外部クロックなどの外部ソースから現在時刻を取得するか、 ユーザーに現在時刻を手動で入力するよう
促す ことで、ベースタイムを初期化します。
実装
システムクロックは通常、 プログラム可能なインターバルタイマー として実装され、CPUに定期的に割り込みをかけます。CPUはタイマー割り込みサービスルーチンの実行を開始します。このルーチンは通常、システムクロック(単純なカウンタ)に1ティックを追加し、その他の定期的なハウスキーピングタスク( プリエンプション など)を処理してから、割り込み前にCPUが実行していたタスクに戻ります。
現在のシステム時刻を取得する
以下の表は、様々な オペレーティングシステム 、 プログラミング言語 、 アプリケーションにおける現在のシステム時刻の取得方法を示しています。(*) でマークされた値はシステム依存であり、実装によって異なる場合があります。日付はすべて グレゴリオ暦 または 先発グレゴリオ 暦で表されます 。
実装における時間測定の分解能 は、必ずしも実際の測定 精度 と同じとは限りません 。例えば、あるシステムは現在の時刻をマイクロ秒単位で返しますが、実際には100Hz(10ミリ秒)の周波数で個々のクロックティックを識別できる場合があります。
オペレーティングシステム
プログラミング言語とアプリケーション
参照
注記
^ ab Apple Developer Documentationでは、CFAbsoluteTime/CFTimeIntervalの精度と範囲について明確な記述がありません。ただし、CFRunLoopTimerCreateのドキュメントでは「最大1ミリ秒未満」の精度と記載されています。ただし、類似のNSTimeInterval型は互換性があるようで、精度と範囲が記載されています。
^ abcd C 標準ライブラリは、 システム時刻値 の特定の解像度、エポック、範囲、またはデータ型を指定していません 。C++ライブラリはCライブラリを包含しているため、Cと同じシステム時刻実装を使用します。
参考文献
^ Ralf D. Brown (2000). 「Int 0x1A, AH=0x00」. Ralf Brownの割り込みリスト .
^ Ralf D. Brown (2000). 「Int 0x1A, AH=0x02」. Ralf Brownの割り込みリスト .
^ Ralf D. Brown (2000). 「Int 0x1A, AH=0x04」. Ralf Brownの割り込みリスト .
^ 「CP/M Plus (CP/M バージョン 3.0) オペレーティング システム ガイド」 (PDF) 。
^ 「BDOS システムコール」。
^ Ralf D. Brown (2000). 「Int 0x21, AH=0x2c」. Ralf Brownの割り込みリスト .
^ Ralf D. Brown (2000). 「Int 0x21, AH=0x2a」. Ralf Brownの割り込みリスト .
^ "CFAbsoluteTimeGetCurrent". Apple Developer Documentaton . 2007.
^ ab "CFRunLoopTimerCreate". Apple Developer Documentation . 2025年 8月5日 閲覧 。
^ ルース・E・ゴールデンバーグ;ローレンス・J・ケナ。デニス E. デュマ (1991)。 VAX/VMS の内部構造とデータ構造、バージョン 5.2。デジタルプレス。 ISBN 978-1555580599 。
^ “Why is Wednesday, November 17, 1858 the base time for OpenVMS (VAX VMS)?” Stanford University . 1997年7月24日. 1997年7月24日時点のオリジナルよりアーカイブ。 2020年 1月8日 閲覧 。
^ ab 「OpenVMSシステム用VSI Cランタイムライブラリリファレンスマニュアル」 (PDF) . VSI. 2020年11月. 2021 年4月17日 閲覧 。
^ 「OpenVMSと2038年」HP . 2021年4月17日 閲覧 。
^ ab z/Architecture Principles of Operation (PDF) . ポキプシー、ニューヨーク: International Business Machines. 2007.
^ IBM は将来のシステムで日付範囲を 2042 年以降に拡張する予定です。z/Architecture Principles of Operation、(Poughkeepsie、New York:International Business Machines、2007) 1-15、4-45 から 4-47。
^ 「拡張された64ビット時刻値」IBM . 2021年4月18日 閲覧。
^ Jonathan de Boyne Pollard. 「32ビットコマンドインタープリタ」。OS /2 Warp 4では、日付と時刻は2000年をはるかに超え、さらには2038年をはるかに超え、OS/2 Warp 4のリアルタイムクロックの限界である2079年まで対応しています。
^ abc 「DateTime.Now プロパティ」。Microsoft Docs 。
^ abc 「DateTime.UtcNow プロパティ」。Microsoft Docs 。
^ abc 「DateTime.Ticks プロパティ」。Microsoft Docs 。
^ 「日付と時刻のサポート」。Embarcadero Developer Network 。2013年。
^ "System.SysUtils.Time". Embarcadero Developer Network . 2013年。
^ "System.SysUtils.GetTime". Embarcadero Developer Network . 2013.
^ "System.SysUtils.Date". エンバカデロ開発者ネットワーク 2013年。
^ "System.DateUtils.Today". Embarcadero Developer Network . 2013年。
^ "System.DateUtils.Tomorrow". エンバカデロ開発者ネットワーク . 2013年.
^ "System.DateUtils.Yesterday". エンバカデロ開発者ネットワーク . 2013年.
^ "System.SysUtils.Now". Embarcadero Developer Network . 2013年。
^ "System.SysUtils.DayOfWeek". Embarcadero Developer Network . 2013.
^ "System.SysUtils.CurrentYear". Embarcadero Developer Network . 2013.
^ abc 「Erlangにおける時間と時間修正」 www.erlang.org 。
^ 「XL2000: Officeスプレッドシートコンポーネントの初期日付がExcelと異なる」 Microsoftサポート 。2003年。2007年10月24日時点のオリジナルからのアーカイブ。Microsoft Officeスプレッドシートコンポーネントでは、値0は1899年12月30日、値1は1899年12月31日と評価されます。…Excelでは、値0は1900年1月0日、値1は1900年1月1日と評価されます。
^ "SYSTEM_CLOCK". Intel Fortran コンパイラ 19.0 開発者ガイドおよびリファレンス . 2019年4月29日. 2019年 7月23日 閲覧 。
^ 「SYSTEM_CLOCK — 時間関数」. GNU Fortranコンパイラ. 2011年 10月27日 閲覧 。
^ ab "System.nanoTime() メソッド". Java Platform, Standard Edition 6: API 仕様 . 2015年. 2019年 7月23日 閲覧 。
^ 「Clock.systemUTC() およびその他のメソッド」。Java Platform, Standard Edition 8: API 仕様 。2014年。 2015年 1月15日 閲覧 。
^ 「JSR-310 Java Time System」。Java Platform, Standard Edition 8: API仕様 。2014年。 2015年 1月15日 閲覧 。
^ 「Matlab ヘルプ」。
^ ab "NSTimeInterval - Foundation". Apple開発者ドキュメント .
^ Douglas Wegscheild、R. Schertler、Jarkko Hietaniemi、 「Time::HiRes」。 CPAN - 包括的な Perl アーカイブ ネットワーク 。 2011年 。 2011 年 10 月 27 日 に取得 。
^ 「タイムクラス」。
^ Yugui (2010年8月18日). 「Ruby 1.9.2 がリリースされました」。 新しい 1.9.2 は、以下の変更点を除いて 1.9.1 とほぼ互換性があります。… 時刻が再実装されました。2038 年に関するバグが修正されました。
^ 「MIT/GNU Scheme 9.2: 15.5 日付と時刻」。
^ 「Get-Dateコマンドレットの使用」。Microsoft Docs 。2009年10月22日。 2019年 7月23日 閲覧 。
^ 「今週のWindows PowerShellヒント - 日付と時刻の書式設定」 Microsoft Docs 2010年5月26日. 2019年 7月23日 閲覧 。
外部リンク
重要な日付と重要な日付 、JRストックトン (2015年12月3日閲覧)
Boost 日付/時刻ライブラリ (C++)
Boost Chrono ライブラリ (C++)
クロノス日付/時刻ライブラリ (Smalltalk)
Joda Time 、Joda 日付/時刻ライブラリ (Java)
Perl DateTime プロジェクトは、 Wayback Machine で 2009-02-19 にアーカイブされています(Perl)
日付: Ruby標準ライブラリドキュメント (Ruby)