UNIX時間(ユニックスじかん)またはUNIX時刻(ユニックスじこく、UNIX time(ユニックスタイム)、POSIX time(ポジックスタイム))とはコンピューターシステム上での時刻表現の一種。協定世界時 (UTC) での1970年1月1日午前0時0分0秒(UNIXエポック)から形式的な経過秒数として表される。
真の経過秒数ではなく[1]、その間に挿入された閏秒を引き、削除された閏秒を加えた値である。大多数のシステムで採用されている[注 2]。
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エポックからの 真の経過秒数[注 3]
|
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 はミリ秒を採用していた(java.lang.System.currentTimeMillis()[2] など)。表現するための数値として64ビット符号付き整数が使われることが多いが、64ビット倍精度浮動小数点数が使われることもある(Pythonのtime.time()[3]など)。かつては単位を秒として32ビット符号付き整数が使われたこともあったがこれは2038年までしか表現できない。
表現できる日付の範囲
値の型
|
時間単位
|
日付の下限
|
日付の上限
|
int32
|
秒
|
1901年12月13日20時45分52秒
|
2038年1月19日3時14分7秒
|
int64
|
秒
|
2.9e11 BC
|
2.9e11 AD[4]
|
ミリ秒
|
2.9e8 BC
|
2.9e8 AD[4]
|
マイクロ秒
|
290301 BC
|
294241 AD[4]
|
ナノ秒
|
1677年9月21日 00:12:43.145224192
|
2262年4月11日 23:47:16.854775807[5]
|
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以降ではスクラッチパッド[注 4])
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;
}
脚注
注釈
出典
関連項目
外部リンク