Movatterモバイル変換


[0]ホーム

URL:


コンテンツにスキップ
Wikipedia
検索

システム時刻

出典: フリー百科事典『ウィキペディア(Wikipedia)』
この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。このテンプレートの使い方
出典検索?"システム時刻" – ニュース ·書籍 ·スカラー ·CiNii ·J-STAGE ·NDL ·dlib.jp ·ジャパンサーチ ·TWL
(2023年11月)
UNIXdateコマンドの実行例

システム時刻またはシステム時間:system time)とは、計算機科学およびプログラミングにおいて経過時間を表現する概念である。この意味において「時刻」とはカレンダー上の経過日数も含む。

概要

[編集]

システム時刻は、「システム・クロック」によって生成される一定の「テンポ」(ティック:tick)をシステム起動時(オペレーティングシステムブートアップ時)に読み取ったリアルタイムクロック(ハードウェアクロック)に積算することで、任意の開始時刻(エポック英語版)からの経過時間を求めたものである。このティックは、PCではIntel 8253英語版チップ上のプログラマブル・インターバル・タイマー英語版Programmable Interval Timer: PIT)から割り込みベクタ"IRQ0"を利用し定期的に発生させることが可能であり、このインターバルをシステム時刻に周期的に加算する[1]近年[いつ?]ではPITより高機能なHPETが搭載されていることが多い。Linuxカーネルではこのインターバル回数を"Hz"というマクロカーネルビルド時に指定することができる[2]Unix系、ならびにPOSIX互換なオペレーティングシステムでは例えば、1970年1月1日0時0分0秒(UTC)すなわちUNIXエポックから閏秒を考慮しない経過時間(UNIX時間)が、Microsoft Windows NTでは1601年1月1日0時0分(UTC)からの100ナノ秒ティック単位での経過時間が主に用いられる。

システム時刻は人間にとって慣れ親しんだカレンダー時刻に容易に相互変換できる。例えば、UNIXtime_tはこのような変換をサポートするデータ型の一つであり、UNIX時間=1,000,000,000秒を、カレンダー時刻2001-09-09 01:46:40 UTC(ただし閏秒を考慮しない)に変換して表示できる。プログラミングで用いられる時間に関するライブラリ関数やサブルーチンは、一般的に異なる時刻表現の間の相互変換だけでなく、等時帯(地球上の時差)、夏時間、閏秒またユーザーのロケール設定に合わせて調節する機能もあり、時刻を適切に扱うことができる。

その他の時刻測定法

[編集]

システム時刻とともによく用いられる、コンピュータシステムに関する時間表現として、「プロセス時間」(process time)がある。これは「実CPU時間」(real CPU time)とも呼ばれ、プロセス実行に要したCPU利用時間の総計であり、プログラム中でループ処理をしているときに費やされた「User CPU時間」と、execfork等のカーネルシステムコールを行うのに要した「System CPU時間」の合計のことである。よってプロセス時間は、CPUの命令サイクルの総数またはクロックサイクルの総数であり、一般的には壁時計時刻英語版との直接的な相関関係は存在しない。

ファイルシステムも、個々のファイルの作成・最終変更・最終アクセスの時刻を、このシステム時刻を用いてタイムスタンプという形でファイル毎に記録している。例えばUNIXではシステムコールstat英語版を利用し、ctime, mtime, atimeという形でファイル制御ブロック英語版File Control Block: FCB)、すなわち各ファイル並びにディレクトリinodeに記録する。

歴史

[編集]

初期のPCではシステム時刻はコンピュータの電源を切ったと同時に消滅するため、起動ごとに時刻を設定する必要があった。CP/Mや初期のApple IICommodore PETといったコンピュータがこれらに当たる。1981年に発売されたIBM PCが初めて、電源を切ってもバッテリーで動作し続けるリアルタイムクロックマザーボードに搭載して、システム時刻を安定して利用できる仕組みを整えた。また、インターネットが一般的となる以前のコンピュータでは、システム時刻が「ローカルタイム」(そのコンピュータのタイムゾーン)を暗黙的に指していることもあった。

現在では、いわゆるコンピュータだけではなく、以下のような家庭用・個人用の電化製品もシステム時刻を実装・利用している。内蔵時計を駆動できるバッテリーを内蔵しているものもあるが、待機電力で駆動しているものも多く、電源ケーブルを取り外して電源を遮断すると時刻がリセットされる。

システム時刻を得る方法

[編集]
ウィキペディア
2025年10月26日 10:37:33 UTC

ウィキペディアにおいてこのページがキャッシュされた最後のシステム時刻

次に示すのは各種オペレーティングシステム (OS) とプログラム言語そしてアプリケーションでシステム時刻を得る手法である。

OSのシステムコールまたはBIOSの割り込みルーチン

[編集]
OSシステムコール/関数分解能[注釈 1]起点となる開始時刻/終了時刻
BIOS (IBM PC)INT 1Ah,AH=00h[3]54.931 ms
18.204 Hz
稼働日の午前0時
INT 1Ah,AH=02h[4]1 s1980-01-01
DOSマイクロソフトTIME
INT 21h,AH=2Ch[5]
10 ms1980-01-01 to 2099-12-31
Mac OSAppleCFAbsoluteTimeGetCurrent()[6]1 ms 未満[7][注釈 2]2001-01-01 ±10,000年[7][注釈 2]
OpenVMS (HP)SYS$GETTIM()100 ns1858-11-17[注釈 3] to AD 31,086
z/OS (IBM)STCK[8]2−12 µs
244.14 ps[9]
1900-01-01 から 2042-09-17UTC[注釈 4]
Unix系POSIXdate
time()
1 s(*)
1970-01-01 to2038-01-19
1970-01-01 から AD 292,277,026,596
gettimeofday()1 µs
Windows(マイクロソフト)GetSystemTime()1 ms1601-01-01 から AD 30,828
GetSystemTimeAsFileTime()100 ns
GetSystemTimePreciseAsFileTime()

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

[編集]
言語/アプリ関数/プロパティ分解能[注釈 1]起点となる開始時刻/終了時刻
AdaAda.Calendar.Clock100 µs to
20 ms (*)
1901-01-01 to 2099-12-31 (*)
AWKsystime()1 s(*)
BASIC,True BASICDATE,DATE$
TIME,TIME$
1 s(*)
Business Basic英語版DAY,TIM0.1 s(*)
Ctime()1 s (*)[注釈 5](*)[注釈 5]
C++std::chrono::system_clock::now()[注釈 6](*)[注釈 7](*)[注釈 7]
C# (Microsoft)System.DateTime.Now[11]
System.DateTime.UtcNow[12]
100 ns[13]0001-01-01 to 9999-12-31
CICS (IBM)ASKTIME1 ms1900-01-01
COBOLFUNCTION CURRENT-DATE1 s1601-01-01
Common Lisp(get-universal-time)1 s1900-01-01
Delphi (Borland)date
time
1 ms
(浮動小数点数)
1900-01-01
Excel (Microsoft)date()?1900-01-00[14]
FORTRANDATE_AND_TIME
SYSTEM_CLOCK
(*)[15][16]1970-01-01
CPU_TIME1 µs
HaskellTime.getClockTime1 µs(*)1970-01-01(*)
Java (Sun)java.util.Date()
System.currentTimeMillis()
1 ms1970-01-01
System.nanoTime()[17]1 ns任意[17]
JavaScriptDate()1 ms1970-01-01
MUMPS$H (短縮形$HOROLOG英語版)1 s1840-12-31
LabVIEWティックカウント(ms)1 ms1904-01-01 00:00:00.000
日付/時間を秒で取得1 ms
Objective-C[NSDate timeIntervalSinceReferenceDate]1 ms 未満[18]2001-01-01 ±10,000年[18]
OCamlUnix.time ()1 s1970-01-01
Unix.gettimeofday ()1 µs
ExtendedPascalGetTimeStamp()1 s(*)
Turbo PascalGetTime()
GetDate()
10 ms(*)
Perltime()1 s1970-01-01
Time::HiRes::time[19]1 µs
PHPtime()
mktime()
1 s1970-01-01
microtime()1 µs
Pythontime.time()1 µs (*)1970-01-01
RPGCURRENT(DATE),%DATE
CURRENT(TIME),%TIME
1 s0001-01-01 から 9999-12-31
CURRENT(TIMESTAMP),%TIMESTAMP1 µs
RubyTime.now()[20]1 µs (*)1970-01-01 から 2038-01-19[注釈 8]
SmalltalkTime microsecondClock
(VisualWorks)
1 s(ANSI)
1 µs(VisualWorks)
1 s(Squeak)
1901-01-01 (*)
Time totalSeconds
(Squeak)
SystemClock ticksNowSinceSystemClockEpoch
(Chronos)
SQLCURDATE()
CURTIME()
GETDATE()
NOW()
SYSDATE()
3 ms1753-01-01 to 9999-12-31 (*)
60 s1900-01-01 to 2079-06-06
Standard MLTime.now ()1 µs(*)1970-01-01(*)
Tcl[clock seconds]1 s1970-01-01
[clock milliseconds]1 ms
[clock microseconds]1 µs
[clock clicks]1 µs (*)(*)
Windows PowerShellGet-Date[21]100 ns[13]0001-01-01 to 9999-12-31
[DateTime]::Now[11]
[DateTime]::UtcNow[12]
Visual Basic .NET (Microsoft)System.DateTime.Now[11]
System.DateTime.UtcNow[12]
100 ns[13]0001-01-01 to 9999-12-31

脚注

[編集]
[脚注の使い方]

注釈

[編集]
  1. ^ab分解能 (resolution) と精度 (precision) はそれぞれ別の概念である。日本語で「精度」と誤訳されているものが、実際には分解能を指していることがある。時間に関する分解能は特に時間分解能と呼ばれる。
  2. ^abAppleの開発者用ドキュメントではCFAbsoluteTime/CFTimeIntervalの精度と範囲が不明瞭であるがCFRunLoopTimerCreateは「多く見積もってsub-millisecond程度」の精度を持つとの記述がある。しかしながら、同様の型NSTimeIntervalは相互に変換でき、精度と範囲が記録されている。
  3. ^いわゆる「修正ユリウス通日」("Modified Julian Day")の起点日。
  4. ^IBMは将来のシステムで日付の限界を2042年以降に拡張する予定である。[10]
  5. ^ab標準Cライブラリはシステム時刻値time_t向けに特定の精度、起点、範囲またはデータ型を全く指定していない。ただし、POSIXにおいては、UNIX時間であることが追加で規定されている。
  6. ^std::chronoC++11規格にて追加されたライブラリ。これはBoost C++ライブラリboost::chronoがベースとなっている。
  7. ^ab標準C++ライブラリは特定の精度、起点、範囲またはデータ型を全く指定していない。
  8. ^ただし、上限については、Ruby 1.9.2(Ruby 1.9.2 Release Notes)以前の情報。

出典

[編集]
  1. ^大竹龍史 (2008年12月26日). “暗記に頼らずちゃんと理解 実践でも役立つLPICドリル - 第8回 Linux時刻管理の仕組みと設定”. アットマーク・アイティ. jibun.atmarkit.co.jp. 2011年8月12日閲覧。
  2. ^Real Time Clock (RTC) Drivers for Linux”. git.kernel.org. 2011年8月12日閲覧。
  3. ^ラルフ・ブラウン(Ralf Brown)によるBIOS, DOSの参考資料、ラルフ・ブラウンの割り込みリスト英語版(2000年)では"Int 0x1A, AH=0x00"となっている。オンライン閲覧可能なもの
  4. ^Ralf Brown, "Int 0x1A, AH=0x02" inRalf Brown's Interrupt List英語版, 2000,http://www.delorie.com/djgpp/doc/rbinter/ix/1A/02.html
  5. ^Ralf Brown, "Int 0x21, AH=0x2c" inRalf Brown's Interrupt List英語版, 2000,http://www.delorie.com/djgpp/doc/rbinter/ix/21/2C.html
  6. ^"Time Utilities Reference" inMac OS X Developer Library (Apple, 2007).
  7. ^ab"CFRunLoopTimer Reference" inMac OS X Developer Library (Apple, 2007).
  8. ^z/Architecture Principles of Operation, (Poughkeepsie, New York:International Business Machines, 2007) 7-187.
  9. ^z/Architecture Principles of Operation, (Poughkeepsie, New York:International Business Machines, 2007) 4-45, 4-46.
  10. ^z/Architecture Principles of Operation, (Poughkeepsie, New York:International Business Machines, 2007) 1-15, 4-45 to 4-47.
  11. ^abc"DateTime.Now Property" inMSDN (Microsoft, 2010). 最終更新: 2010年7月。
  12. ^abc"DateTime.UtcNow Property" inMSDN (Microsoft, 2011).
  13. ^abc"DateTime.Ticks Property" inMSDN (Microsoft, 2010). 最終更新: 2010年5月。
  14. ^XL2000: Early Dates on Office Spreadsheet Component Differ from Excel”. Microsoft (2003年). 2011年5月8日閲覧。 “In the Microsoft Office Spreadsheet Component, the value 0 evaluates to the dateDecember 30, 1899 and the value 1 evaluates to December 31, 1899. ... In Excel, the value 0evaluates to January 0, 1900 and the value 1 evaluates to January 1, 1900.”
  15. ^FORTRAN SYSTEM_CLOCK”. Intel Corp.. 2011年5月10日閲覧。
  16. ^FORTRAN SYSTEM_CLOCK — Time function”. GNUプロジェクト. 2011年5月12日閲覧。
  17. ^abSystem.nanoTime()メソッド”. Java Platform, Standard Edition 6: API Specification. Oracle (2011年). 2011年11月5日閲覧。
  18. ^ab"Foundation Data Types Reference" inMac OS X Developer Library (Apple, 2011). section NSTimeInterval. 最終更新: 2011年7月6日。
  19. ^Douglas Wegscheild, R. Schertler and Jarkko Hietaniemi (2011年6月9日). “Jarkko Hietaniemi / Time-HiRes - search.cpan.org”. search.cpan.org. 2011年11月5日閲覧。
  20. ^Scottsdale, AZ: James Britt and Neurogami. “Time class”. Ruby-Doc.org: Help and documentation for the Ruby programming language. 2011年11月5日閲覧。
  21. ^"Get-Date" in Microsoft TechNet. Get-DateはPowerShellの「コマンドレット」("Commandlet", "cmdlet")である。コマンドレットとはUnix系シェルの内蔵コマンド(ビルトイン・コマンド)同様、追加のプログラムなしで利用できるコマンドである。

関連項目

[編集]

外部リンク

[編集]
出典は列挙するだけでなく、脚注などを用いてどの記述の情報源であるかを明記してください。 記事の信頼性向上にご協力をお願いいたします。2021年10月
ウィキペディアはオンライン百科事典であって、情報を無差別に収集する場ではありません改善ノートページでの議論にご協力ください。2021年10月
主要概念
単位と規格
クロノメトリー英語版
単位系
時計
編年 ・ 歴史
宗教 ・ 神話
哲学
人間の経験と
時間の利用
分野別の時間
地質学
物理学
その他の分野
関連項目
国際規格
過去の規格
物理学
時計学
考古学と地質学
天文年代学
時間の単位
関連記事
https://ja.wikipedia.org/w/index.php?title=システム時刻&oldid=106982875」から取得
カテゴリ:
隠しカテゴリ:

[8]ページ先頭

©2009-2025 Movatter.jp