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

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

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

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

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

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

現在では、いわゆるコンピュータだけではなく、以下のような家庭用・個人用の電化製品もシステム時刻を実装・利用している。内蔵時計を駆動できるバッテリーを内蔵しているものもあるが、待機電力で駆動しているものも多く、電源ケーブルを取り外して電源を遮断すると時刻がリセットされる。
 録画機能や目覚まし機能を内蔵したテレビ受像機
 VTR（VCR）
 DVDレコーダーをはじめとする
 ケーブルテレビ受像機
 PDA
 ポケベル
 カーナビゲーションシステム
 携帯電話
 Fax機器
 留守番電話
 デジタルカメラ
 カムコーダ
 エアコン
 電子レンジ

 システム時刻を得る方法 

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

 注1：開始時刻・限界時刻の欄に「 * 」を記載しているものは、アーキテクチャーの状況（例：32ビット／64ビットなど）や処理系（コンパイラ）の実装などにより結果が異なることを示す。
 注2：全ての日時はグレゴリオ暦または先発グレゴリオ暦である。

 OSのシステムコールまたはBIOSの割り込みルーチン 
 OS システムコール/関数 分解能 起点となる開始時刻/終了時刻BIOS (IBM PC) INT 1Ah,AH=00h 54.931 ms 18.204 Hz 稼働日の午前0時 INT 1Ah,AH=02h 1 s 1980-01-01 DOS（マイクロソフト） TIME INT 21h,AH=2Ch 10 ms 1980-01-01 to 2099-12-31 Mac OS（Apple） CFAbsoluteTimeGetCurrent() 1 ms 未満 2001-01-01 ±10,000年 OpenVMS (HP) SYS$GETTIM() 100 ns 1858-11-17 to AD 31,086 z/OS (IBM) STCK 2−12 µs 244.14 ps 1900-01-01 から 2042-09-17 UTC Unix系、POSIX date time() 1 s(*) 1970-01-01 to 2038-01-19 1970-01-01 から AD 292,277,026,596 gettimeofday() 1 µs Windows（マイクロソフト） GetSystemTime() 1 ms 1601-01-01 から AD 30,828 GetSystemTimeAsFileTime() 100 ns GetSystemTimePreciseAsFileTime()

 プログラミング言語のAPIとアプリケーション 
言語/アプリ関数/プロパティ分解能起点となる開始時刻/終了時刻 Ada Ada.Calendar.Clock 100 µs to 20 ms (*) 1901-01-01 to 2099-12-31 (*) AWK systime() 1 s (*) BASIC, True BASIC DATE, DATE$ TIME, TIME$ 1 s (*) DAY, TIM 0.1 s (*) C time() 1 s (*) (*) C++ std::chrono::system_clock::now() (*) (*) C# (Microsoft) System.DateTime.Now System.DateTime.UtcNow 100 ns 0001-01-01 to 9999-12-31 CICS (IBM) ASKTIME 1 ms 1900-01-01 COBOL FUNCTION CURRENT-DATE 1 s 1601-01-01 Common Lisp (get-universal-time) 1 s 1900-01-01 Delphi (Borland) datetime 1 ms (浮動小数点数) 1900-01-01 Excel (Microsoft) date() ? 1900-01-00 FORTRAN DATE_AND_TIME SYSTEM_CLOCK (*) 1970-01-01 CPU_TIME 1 µs Haskell Time.getClockTime 1 µs(*) 1970-01-01(*) Java (Sun) java.util.Date()System.currentTimeMillis() 1 ms 1970-01-01 System.nanoTime() 1 ns 任意 JavaScript Date() 1 ms 1970-01-01 MUMPS $H (短縮形 ) 1 s 1840-12-31 LabVIEWティックカウント(ms)1 ms1904-01-01 00:00:00.000日付/時間を秒で取得1 ms Objective-C [NSDate timeIntervalSinceReferenceDate] 1 ms 未満 2001-01-01 ±10,000年 OCaml Unix.time () 1 s 1970-01-01 Unix.gettimeofday () 1 µs Extended Pascal GetTimeStamp() 1 s (*) Turbo Pascal GetTime() GetDate() 10 ms (*) Perl time() 1 s 1970-01-01 Time::HiRes::time 1 µs PHP time()mktime() 1 s 1970-01-01 microtime() 1 µs Python time.time() 1 µs (*) 1970-01-01 RPG CURRENT(DATE), %DATE CURRENT(TIME), %TIME 1 s 0001-01-01 から 9999-12-31 CURRENT(TIMESTAMP), %TIMESTAMP 1 µs Ruby Time.now() 1 µs (*) 1970-01-01 から 2038-01-19 Smalltalk Time microsecondClock (VisualWorks) 1 s (ANSI) 1 µs (VisualWorks) 1 s (Squeak) 1901-01-01 (*) Time totalSeconds (Squeak) SystemClock ticksNowSinceSystemClockEpoch (Chronos) SQL CURDATE() CURTIME() GETDATE() NOW() SYSDATE() 3 ms 1753-01-01 to 9999-12-31 (*) 60 s 1900-01-01 to 2079-06-06 Standard ML Time.now () 1 µs(*) 1970-01-01(*) Tcl [clock seconds] 1 s 1970-01-01 [clock milliseconds] 1 ms [clock microseconds] 1 µs [clock clicks] 1 µs (*) (*) Windows PowerShell Get-Date 100 ns 0001-01-01 to 9999-12-31 [DateTime]::Now [DateTime]::UtcNow Visual Basic .NET (Microsoft) System.DateTime.Now System.DateTime.UtcNow 100 ns 0001-01-01 to 9999-12-31