UNIX時間

現在のUnix時間 （ISO 8601形式：Z）
UNIX時間（ユニックスじかん）またはUNIX時刻（ユニックスじこく、UNIX time（ユニックスタイム）、POSIX time（ポジックスタイム））とはコンピューターシステム上での時刻表現の一種。協定世界時（UTC）での1970年1月1日午前0時0分0秒（UNIXエポック）から形式的な経過秒数として表される。

真の経過秒数ではなくこれに対し例えばGPS時刻は真の経過秒数を表現する。、その間に挿入された閏秒を引き、削除された閏秒を加えた値である。大多数のシステムで採用されている。

UNIX系のオペレーティングシステム（データ型はtime_t）だけでなく、他の多くのオペレーティングシステムにおいてもこの表現方法が用いられている。システム内部では64ビット符号付整数（signed int）や64ビット倍精度浮動小数点数で扱われていることが多い。ここで、以前は多かった32ビット整数で扱われていた場合で、符号付きであった場合、その最大値 2,147,483,647 を超えると負の値になり、正しく時刻を扱えなくなるという問題がある。これを2038年問題という。

 協定世界時（UTC）との関係 
UNIX時刻はシステム依存だが、大多数のシステムでは、協定世界時（UTC）の時刻に基づき、1970年1月1日午前0時0分0秒（UNIXエポック）からの経過秒数を、閏秒の存在を無視し形式的な差を計算した値に等しい。したがって正の閏秒1秒が挿入された時刻を挟んだ2秒間において、UNIX時刻の値は1秒しか値が進まない。システムによっては、前後のある程度の時間に分散させてズレを吸収するものもある。また閏秒の前後での、秒より細かい時刻の扱いについては、システムにより異なることがある（特に、閏秒によって時刻が1秒巻き戻ったかのように見える場合もあり得るので注意が必要）。

+ 閏秒1秒が挿入された時刻をはさむUNIX時刻の例 協定世界時 (UTC) UNIXエポックからの真の経過秒数 UNIX時刻 1998-12-31T23:59:59 915148820 915148799 1998-12-31T23:59:60 915148821 915148800 1999-01-01T00:00:00 915148822 915148800 1999-01-01T00:00:01 915148823 915148801

 表現できる日付の範囲 

UNIXエポックからの経過時間を表現する際の単位として、秒以外にも、様々な単位を使うことができ、秒とナノ秒が利用されることが多めであるが、最初の Java や JavaScript はミリ秒を採用していた（など）。表現するための数値として64ビット符号付き整数が使われることが多いが、64ビット倍精度浮動小数点数が使われることもある（Pythonのtime.time()time.time --- 時刻データへのアクセスと変換 — Pythonドキュメントなど）。かつては単位を秒として32ビット符号付き整数が使われたこともあったがこれは2038年までしか表現できない。

+ 表現できる日付の範囲 値の型 時間単位 日付の下限 日付の上限 int32 秒 1901年12月13日20時45分52秒 2038年1月19日3時14分7秒 int64 秒 2.9e11 BC 2.9e11 ADDatetime Units - Datetimes and Timedeltas — NumPy Manual ミリ秒 2.9e8 BC 2.9e8 AD マイクロ秒 290301 BC 294241 AD ナノ秒 1677年9月21日 00:12:43.145224192 2262年4月11日 23:47:16.854775807Time series / date functionality — pandas documentation

 UNIX時刻の表示例 
+ UNIX時間の例 UNIX時間 協定世界時 (UTC) 日本標準時 (JST) 0 1970-01-01T00:00:00 1970-01-01T09:00:00 100000000 1973-03-03T09:46:40 1973-03-03T18:46:40 1000000000 2001-09-09T01:46:40 2001-09-09T10:46:40 1234567890 2009-02-13T23:31:30 2009-02-14T08:31:30 2147483647 2038-01-19T03:14:07 2038-01-19T12:14:07

 プログラミング言語やシェルからの利用例 
UNIX/Linuxのシェル上で、UNIX時間をUTCに変換する例
 date -u -d '@1234567890'
*BSDのシェル上で、UNIX時間をUTCに変換する例
 date -jr '1234567890'
UNIX/Linuxのシェル上で、UNIX時間をローカル時刻に変換する例
 date -d '@1234567890'
*BSDのシェル上で、UNIX時間をローカル時刻に変換する例
 date -j '+%s'
Webブラウザのアドレスバー（URL欄）にJavaScriptを入力することで表示させる例（Firefox 6.0以降ではスクラッチパッド）
 javascript:window.alert(Math.floor((new Date()).getTime()/1000))

C言語で現在のUNIX時刻を表示するプログラム
#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t now;
    now = time(NULL);
    printf("%lld", (long long)now);
    return 0;
}

 脚注 

 注釈 

 出典 

 関連項目 
time_t
2001年9月9日問題
2038年問題
ユリウス通日 - ユリウス暦紀元前4713年1月1日の正午（世界時）からの日数。天文学で使われる。
時刻#コンピュータの時法

 外部リンク 

UNIX時間変換ツール
UNIX時間⇒日付変換
UNIXtime時刻相互変換ツール
UNIXTIME相互変換ツール - konisimple
Online Conversion - Unix time conversion

Category:UNIX
Category:時刻系
Category:コンピュータと時間
Category:カレンダー標準