調べて分かる道具箱

Unix時間の変換

桁から単位を判断します。10桁は秒、13桁はミリ秒。どう読んだかも表示します。

Unix時間から日時へ
単位

10なので秒(10桁)として読んでいます。 違うときは上のボタンで変えられます。

日時
読み方日時
この端末の時間帯読み込み中
UTC(協定世界時)Unix時間はこの時刻からの経過2023-11-14 22:13:20
ISO 8601ログや API で使う形2023-11-14T22:13:20.000Z
ほかの単位でも秒 / ミリ秒1700000000 / 1700000000000
日時から Unix時間へ
この日時をどちらとして読むか
1700000000 秒 / 1700000000000 ミリ秒

よくある質問

13桁のUnix時間は何ですか?

ミリ秒で数えたUnix時間です。10桁は秒、13桁はミリ秒、16桁はマイクロ秒です。同じ数字でも読み方を間違えると大きくずれます。1700000000を秒として読むと2023年ですが、ミリ秒として読むと1970年1月20日になります。

Unix時間とは何ですか?

1970年1月1日0時0分0秒(UTC)からの経過時間です。世界中どこでも同じ数字になるので、時差を気にせず時刻を記録できます。この基準の時刻をエポックと呼びます。

Unix時間に時差はありますか?

ありません。Unix時間そのものはUTCからの経過秒数なので、時差の概念が入りません。時差が出てくるのは、人が読める日時に直すときだけです。この計算機がUTCと端末の時間帯を両方出しているのはそのためです。

ミリ秒を秒に直すにはどうしますか?

1000で割ります。1700000000000ミリ秒は1700000000秒です。プログラムの中では、うっかり1000を掛け忘れたり2回掛けたりする間違いが起きやすいので、上の表で両方の値を確認できるようにしています。

2038年問題とは何ですか?

Unix時間を32ビットの符号つき整数で持っているシステムが、2038年1月19日を超えると扱えなくなる問題です。32ビットで表せる最大が2147483647で、これが2038年1月19日3時14分7秒(UTC)にあたります。64ビットで持てば約3000億年先まで表せます。

桁を取り違えると53年ずれます

Unix時間でいちばん多い間違いは、秒とミリ秒の取り違えです。 同じ数字でも、どちらとして読むかで結果がまったく変わります。

1700000000 という10桁の数を秒として読むと2023年11月14日ですが、 ミリ秒として読むと1970年1月20日になります。53年のずれです。 逆に13桁の 1700000000000 を秒として読むと、 西暦5万年より先という現実には無い日付になります。

この計算機は桁数から単位を推定し、どう読んだかを画面に書きます。 推定が違っていれば、単位のボタンで直せます。 黙って秒として読んで1970年と表示するだけでは、間違いに気づけません。

なぜ1970年が基準なのか

Unix時間は1970年1月1日0時0分0秒(UTC)からの経過秒数です。 この基準の時刻をエポックと呼びます。

1970年が選ばれた理由は、Unixというオペレーティングシステムが作られた時期に近く、 切りのよい年だったからだと言われています。 深い意味のある年ではなく、どこかに基準を置く必要があったので置いた、という性質のものです。

基準がUTCで統一されていることには意味があります。 世界のどこで記録しても同じ数字になるので、 時差の違う場所の出来事を並べて比べられます。 時差を考えるのは、人が読む形に直すときだけで済みます。

2038年に起きること

Unix時間を32ビットの符号つき整数で持っているシステムには、期限があります。 32ビットで表せる最大の値は 2147483647 で、 これが2038年1月19日3時14分7秒(UTC)にあたります。

この時刻を1秒でも過ぎると、値があふれてマイナスに転じ、 1901年12月13日として扱われてしまいます。 2000年問題と似た構造ですが、こちらは桁数ではなく整数の上限が原因です。

いまの多くのシステムは64ビットで持っているので、この問題は起きません。 64ビットなら約3000億年先まで表せます。 古い機器や、32ビットのまま動き続けている組み込み機器では、 まだ確認が必要な場合があります。