
コンピュータサイエンスとコンピュータプログラミングにおいて、システム時間はコンピュータシステムの時間の経過の概念を表します。この意味で、時間にはカレンダー上の日数の経過も含まれます。
システム時間は、システム クロックによって測定されます。システム クロックは通常、エポックと呼ばれる任意の開始日から経過したティックの数を単純にカウントする形で実装されます。たとえば、UnixおよびPOSIX準拠のシステムでは、うるう秒を除いて、システム時間 (「 Unix 時間」) をUnix エポックの開始である1970 年 1 月 1 日 00:00:00 UTから経過した秒数としてエンコードします。Windows 9xやWindows NTなど、32 ビット版と 64 ビット版のWindows APIを実装するシステムでは、システム時間は、年/月/日/時/分/秒/ミリ秒の値として表されるSYSTEMTIMEと、グレゴリオ暦で計算された1601 年 1 月 1 日 00:00:00 UT からの 100 ナノ秒のティックの数として表されるFILETIMEの両方で提供されます。
システム時間は、人間が理解しやすい形式であるカレンダー時間に変換できます。たとえば、エポックの開始から1 000 000 000秒のUnix システム時間は、カレンダー時間 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 が実行していたタスクに戻る前に、その他の定期的なハウスキーピング タスク (プリエンプションなど) を処理します。
システム時間を取得しています
次の表は、さまざまなオペレーティング システム、プログラミング言語、およびアプリケーションでシステム時間を取得する方法を示しています。 (*) でマークされた値はシステムに依存し、実装によって異なる場合があります。日付はすべてグレゴリオ暦または先発グレゴリオ暦の日付として示されます。
実装の時間測定の解像度は、そのような測定の精度と同じであることを意味するものではありません。たとえば、システムは現在の時刻をマイクロ秒単位で測定された値として返すかもしれませんが、実際には 100 Hz (10 ms) の周波数で個々のクロック ティックを識別できるだけです。
オペレーティングシステム
プログラミング言語とアプリケーション
参照
注記
- ^ 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 の割り込みリスト。
- ^ 「Time Utilities Reference」。iOS開発者ライブラリ。2007 年。
- ^ 「Time Utilities Reference」。Mac OS X 開発者ライブラリ。2007 年。
- ^ ab 「Time Utilities - Foundation」。Apple Developer Documentation 。 2022年7月6日閲覧。
- ^ ルース・E・ゴールデンバーグ;ローレンス・J・ケナ。デニス E. デュマ (1991)。 VAX/VMS の内部構造とデータ構造、バージョン 5.2。デジタルプレス。ISBN 978-1555580599。
- ^ 「なぜ 1858 年 11 月 17 日水曜日が OpenVMS (VAX VMS) の基準時間となっているのか?」スタンフォード大学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」。Embarcadero Developer Network。2013年。
- ^ 「System.DateUtils.Yesterday」。Embarcadero Developer Network。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 プラットフォーム、標準版 6: API 仕様。2015 年。2019 年7 月 23 日閲覧。
- ^ 「Clock.systemUTC() およびその他のメソッド」。Javaプラットフォーム、標準版 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 Developer Documentation。
- ^ Douglas Wegscheild、R. Schertler、Jarkko Hietaniemi、「Time::HiRes」。CPAN - 包括的な Perl アーカイブ ネットワーク。 2011年。2011 年10 月 27 日に取得。
- ^ James Britt、Neurogami。「Time クラス」。Ruby -Doc.org: Ruby プログラミング言語のヘルプとドキュメント。アリゾナ州スコッツデール。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++)
- Chronos 日付/時刻ライブラリ(Smalltalk)
- Joda Time、Joda 日付/時刻ライブラリ (Java)
- Perl DateTime プロジェクトは 2009-02-19 にWayback Machineにアーカイブされました(Perl)
- 日付: Ruby 標準ライブラリドキュメント(Ruby)
