Unixの日付コマンド

コンピューティングにおいてシステム時間はコンピュータ システムの時点の概念を表します。

システム時間は、システム クロックによって測定されます。システム クロックは通常、エポックと呼ばれる任意の開始日から経過したティックの数を単純にカウントする形で実装されています。たとえば、UnixおよびPOSIX準拠のシステムでは、うるう秒を除いて、1970 年 1 月 1 日 00:00:00 UTのUnix エポックの開始から経過した秒数としてシステム時間 (「Unix 時間」) をエンコードします。Windows 9xWindows 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 IIBBC MicroCommodore PETなどの初期モデルが含まれます。IBM PCおよびXTでは、オンボードバッテリバックアップ付きのリアルタイムクロックチップを搭載したアドオン周辺ボードが利用可能でしたが、マザーボードに日付/時刻ハードウェアを内蔵した最初の普及型PCはIBM ATでした。コンピュータネットワークが広く普及する以前は、システム時刻を記録していたほとんどのパーソナルコンピュータシステムは現地時間のみに基づいており、異なるタイムゾーンを考慮していませんでした

現在の技術では、ほとんどの最新コンピューターが現地の常用時を追跡しており、VCRDVRケーブルテレビ受信機PDAポケベル携帯電話ファックス機、留守番電話カメラ、カムコーダーセントラルエアコン電子レンジなど、他の多くの家庭用および個人用デバイスも同様です。

組み込みシステムRaspberry PiArduino、その他の類似システムなど)内で動作するマイクロコントローラは、必ずしも時刻を追跡するための内部ハードウェアを備えているわけではありません。このようなコントローラシステムの多くは、外部時刻を意識することなく動作します。外部時刻情報を必要とするシステムでは、通常、再起動時にタイムサーバーや外部クロックなどの外部ソースから現在時刻を取得するか、ユーザーに現在時刻を手動で入力するよう 促すことで、ベースタイムを初期化します。

実装

システムクロックは通常、プログラム可能なインターバルタイマーとして実装され、CPUに定期的に割り込みをかけます。CPUはタイマー割り込みサービスルーチンの実行を開始します。このルーチンは通常、システムクロック(単純なカウンタ)に1ティックを追加し、その他の定期的なハウスキーピングタスク(プリエンプションなど)を処理してから、割り込み前にCPUが実行していたタスクに戻ります。

現在のシステム時刻を取得する

以下の表は、様々なオペレーティングシステムプログラミング言語アプリケーションにおける現在のシステム時刻の取得方法を示しています。(*) でマークされた値はシステム依存であり、実装によって異なる場合があります。日付はすべてグレゴリオ暦または先発グレゴリオ暦で表されます

実装における時間測定の分解能は、必ずしも実際の測定精度と同じとは限りません。例えば、あるシステムは現在の時刻をマイクロ秒単位で返しますが、実際には100Hz(10ミリ秒)の周波数で個々のクロックティックを識別できる場合があります。

オペレーティングシステム

プログラミング言語とアプリケーション

参照

注記

  1. ^ ab Apple Developer Documentationでは、CFAbsoluteTime/CFTimeIntervalの精度と範囲について明確な記述がありません。ただし、CFRunLoopTimerCreateのドキュメントでは「最大1ミリ秒未満」の精度と記載されています。ただし、類似のNSTimeInterval型は互換性があるようで、精度と範囲が記載されています。
  2. ^ abcd C標準ライブラリは、システム時刻値の特定の解像度、エポック、範囲、またはデータ型を指定していません。C++ライブラリはCライブラリを包含しているため、Cと同じシステム時刻実装を使用します。

参考文献

  1. ^ Ralf D. Brown (2000). 「Int 0x1A, AH=0x00」. Ralf Brownの割り込みリスト.
  2. ^ Ralf D. Brown (2000). 「Int 0x1A, AH=0x02」. Ralf Brownの割り込みリスト.
  3. ^ Ralf D. Brown (2000). 「Int 0x1A, AH=0x04」. Ralf Brownの割り込みリスト.
  4. ^ 「CP/M Plus (CP/M バージョン 3.0) オペレーティング システム ガイド」(PDF)
  5. ^ 「BDOS システムコール」。
  6. ^ Ralf D. Brown (2000). 「Int 0x21, AH=0x2c」. Ralf Brownの割り込みリスト.
  7. ^ Ralf D. Brown (2000). 「Int 0x21, AH=0x2a」. Ralf Brownの割り込みリスト.
  8. ^ "CFAbsoluteTimeGetCurrent". Apple Developer Documentaton . 2007.
  9. ^ ab "CFRunLoopTimerCreate". Apple Developer Documentation . 2025年8月5日閲覧
  10. ^ ルース・E・ゴールデンバーグ;ローレンス・J・ケナ。デニス E. デュマ (1991)。 VAX/VMS の内部構造とデータ構造、バージョン 5.2。デジタルプレス。ISBN 978-1555580599
  11. ^ “Why is Wednesday, November 17, 1858 the base time for OpenVMS (VAX VMS)?” Stanford University . 1997年7月24日. 1997年7月24日時点のオリジナルよりアーカイブ。 2020年1月8日閲覧
  12. ^ ab 「OpenVMSシステム用VSI Cランタイムライブラリリファレンスマニュアル」(PDF) . VSI. 2020年11月. 2021年4月17日閲覧
  13. ^ 「OpenVMSと2038年」HP . 2021年4月17日閲覧
  14. ^ ab z/Architecture Principles of Operation (PDF) . ポキプシー、ニューヨーク: International Business Machines. 2007.
  15. ^ IBM は将来のシステムで日付範囲を 2042 年以降に拡張する予定です。z/Architecture Principles of Operation、(Poughkeepsie、New York:International Business Machines、2007) 1-15、4-45 から 4-47。
  16. ^ 「拡張された64ビット時刻値」IBM . 2021年4月18日閲覧。
  17. ^ Jonathan de Boyne Pollard. 「32ビットコマンドインタープリタ」。OS /2 Warp 4では、日付と時刻は2000年をはるかに超え、さらには2038年をはるかに超え、OS/2 Warp 4のリアルタイムクロックの限界である2079年まで対応しています。
  18. ^ abc 「DateTime.Now プロパティ」。Microsoft Docs
  19. ^ abc 「DateTime.UtcNow プロパティ」。Microsoft Docs
  20. ^ abc 「DateTime.Ticks プロパティ」。Microsoft Docs
  21. ^ 「日付と時刻のサポート」。Embarcadero Developer Network。2013年。
  22. ^ "System.SysUtils.Time". Embarcadero Developer Network . 2013年。
  23. ^ "System.SysUtils.GetTime". Embarcadero Developer Network . 2013.
  24. ^ "System.SysUtils.Date".エンバカデロ開発者ネットワーク2013年。
  25. ^ "System.DateUtils.Today". Embarcadero Developer Network . 2013年。
  26. ^ "System.DateUtils.Tomorrow".エンバカデロ開発者ネットワーク. 2013年.
  27. ^ "System.DateUtils.Yesterday".エンバカデロ開発者ネットワーク. 2013年.
  28. ^ "System.SysUtils.Now". Embarcadero Developer Network . 2013年。
  29. ^ "System.SysUtils.DayOfWeek". Embarcadero Developer Network . 2013.
  30. ^ "System.SysUtils.CurrentYear". Embarcadero Developer Network . 2013.
  31. ^ abc 「Erlangにおける時間と時間修正」www.erlang.org
  32. ^ 「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日と評価されます。
  33. ^ "SYSTEM_CLOCK". Intel Fortran コンパイラ 19.0 開発者ガイドおよびリファレンス. 2019年4月29日. 2019年7月23日閲覧
  34. ^ 「SYSTEM_CLOCK — 時間関数」. GNU Fortranコンパイラ. 2011年10月27日閲覧
  35. ^ ab "System.nanoTime() メソッド". Java Platform, Standard Edition 6: API 仕様. 2015年. 2019年7月23日閲覧
  36. ^ 「Clock.systemUTC() およびその他のメソッド」。Java Platform, Standard Edition 8: API 仕様。2014年。 2015年1月15日閲覧
  37. ^ 「JSR-310 Java Time System」。Java Platform, Standard Edition 8: API仕様。2014年。 2015年1月15日閲覧
  38. ^ 「Matlab ヘルプ」。
  39. ^ ab "NSTimeInterval - Foundation". Apple開発者ドキュメント.
  40. ^ Douglas Wegscheild、R. Schertler、Jarkko Hietaniemi、「Time::HiRes」。CPAN - 包括的な Perl アーカイブ ネットワーク。 2011年2011 年10 月 27 日に取得
  41. ^ 「タイムクラス」。
  42. ^ Yugui (2010年8月18日). 「Ruby 1.9.2 がリリースされました」。新しい 1.9.2 は、以下の変更点を除いて 1.9.1 とほぼ互換性があります。… 時刻が再実装されました。2038 年に関するバグが修正されました。
  43. ^ 「MIT/GNU Scheme 9.2: 15.5 日付と時刻」。
  44. ^ 「Get-Dateコマンドレットの使用」。Microsoft Docs。2009年10月22日。 2019年7月23日閲覧
  45. ^ 「今週の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)