計算方法と根拠

Unix 時刻とは

Unix 時刻は、1970 年 1 月 1 日 00:00:00(協定世界時)からの経過秒数です。POSIX(The Open Group の仕様)では、1 日をちょうど 86400 秒として数え、うるう秒は含めないと定められています。このサイトもその定義どおりに計算します。

日本時間への変換

日本標準時は協定世界時より 9 時間(32400 秒)進んでおり、日本では夏時間を実施していません。Unix 時刻に 32400 秒を足し、1 日 86400 秒で割って日数と時刻に分け、日数をグレゴリオ暦(4 年に 1 回、100 年で除き 400 年で戻すうるう年)の年月日に直しています。

計算例

Unix 時刻 1000000000 は協定世界時で 2001 年 9 月 9 日 01:46:40 で、日本時間では 2001 年 9 月 9 日 10:46:40 です。Unix 時刻 0 は日本時間の 1970 年 1 月 1 日 09:00:00 です。

使っている式

計算式
名前やっていること式
月が 1〜2 月のときは前の年として数えた年暦の計算で、年の始まりを 3 月にずらすための年です。yy = iy - if(im <= 2, 1, 0)
400 年周期の番号グレゴリオ暦は 400 年(146097 日)で一巡します。era = floor(yy / 400)
周期の中の年400 年周期の中で何年目か(0〜399)です。yoe = yy - era * 400
3 月を 0 とした月3 月が 0、翌年の 2 月が 11 になる月の数え方です。mp = if(im > 2, im - 3, im + 9)
3 月 1 日からの日数3 月 1 日を 0 とした、その年の中の日数です。doy = floor((153 * mp + 2) / 5) + ida - 1
周期の中の日数400 年周期の始まりからの日数です。doe = yoe * 365 + floor(yoe / 4) - floor(yoe / 100) + doy
1970 年 1 月 1 日からの日数(入力した日付)入力した日本時間の日付が、1970 年 1 月 1 日から何日目かです。dayIn = era * 146097 + doe - 719468
入力した日本時間に対応する Unix 時刻日本時間から 9 時間を引いて協定世界時にそろえた秒数です。uIn = dayIn * dayS + ih * 3600 + ii * 60 + is - jst
変換に使う Unix 時刻向きに応じて、入力した Unix 時刻か、日本時間から求めた Unix 時刻を使います。uEff = if(mode == 1, ux, uIn)
日本時間にそろえた秒数Unix 時刻に 9 時間を足した秒数です。t = uEff + jst
1970 年 1 月 1 日(日本時間)からの日数日本時間で数えた日数です。days = floor(t / dayS)
その日の経過秒数日本時間の 0 時からの秒数です。rem = t - days * dayS
時日本時間の時です。hh = floor(rem / 3600)
分日本時間の分です。mm = floor((rem - hh * 3600) / 60)
秒日本時間の秒です。ss = rem - hh * 3600 - mm * 60
0000 年 3 月 1 日からの日数暦の計算の基準日をそろえた日数です。z = days + 719468
400 年周期の番号(変換結果)400 年周期の番号です。era2 = floor(z / 146097)
周期の中の日数(変換結果)400 年周期の始まりからの日数です。doe2 = z - era2 * 146097
周期の中の年(変換結果)うるう年を除いて数えた、周期の中の年です。yoe2 = floor((doe2 - floor(doe2 / 1460) + floor(doe2 / 36524) - floor(doe2 / 146096)) / 365)
3 月 1 日からの日数(変換結果)3 月 1 日を 0 とした日数です。doy2 = doe2 - (365 * yoe2 + floor(yoe2 / 4) - floor(yoe2 / 100))
3 月を 0 とした月(変換結果)3 月が 0 の月の数え方です。mp2 = floor((5 * doy2 + 2) / 153)
日日本時間の日です。dd = doy2 - floor((153 * mp2 + 2) / 5) + 1
月日本時間の月です。mon = if(mp2 < 10, mp2 + 3, mp2 - 9)
年日本時間の年です。yr = yoe2 + era2 * 400 + if(mon <= 2, 1, 0)
曜日の番号0 が日曜、1 が月曜、…6 が土曜です(1970 年 1 月 1 日は木曜)。wd = days + 4 - 7 * floor((days + 4) / 7)
入力が日付として成り立つか1 なら成り立ちます。2 月 30 日のように存在しない日付や、1970 年 1 月 1 日 9 時より前は 0 です。valid = if(mode == 1, 1, if(yr == iy && mon == im && dd == ida && uEff >= 0, 1, 0))
Unix 時刻(結果)1970 年 1 月 1 日 00:00:00 UTC からの秒数です(うるう秒は数えません)。uEff
日本時間: 年(結果)日本標準時(UTC+9)の年です。yr
日本時間: 月(結果)日本標準時の月です。mon
日本時間: 日(結果)日本標準時の日です。dd
日本時間: 時(結果)日本標準時の時(0〜23)です。hh
日本時間: 分(結果)日本標準時の分です。mm
日本時間: 秒(結果)日本標準時の秒です。ss
曜日の番号(0=日曜〜6=土曜)(結果)0 が日曜、1 が月曜、2 が火曜、3 が水曜、4 が木曜、5 が金曜、6 が土曜です。wd
日付として成り立つか(1=成り立つ・0=成り立たない)(結果)0 のときは、存在しない日付、または 1970 年 1 月 1 日 9 時(日本時間)より前の入力です。結果は参考にしないでください。valid

式の記法: + - * / ^(べき乗)、かっこ、min / max / round / ceil / floor / pow / abs / sqrt、if(条件, 真のとき, 偽のとき)。round(x, 桁) は四捨五入、ceil は切り上げ、floor は切り捨てです。

設定値(定数)と出典

設定値と出典
項目値出典時点見直しの周期
1 日の秒数(POSIX の定義)86,400秒The Open Group Base Specifications Issue 7「4.16 Seconds Since the Epoch」2026年10月27日POSIX の改訂のたびに確認(次回見直し 2027年10月27日)
日本標準時と協定世界時の差(UTC+9)32,400秒情報通信研究機構(NICT)日本標準時グループ「日本標準時をつくる」2026年10月27日制度の変更があったときに確認(次回見直し 2027年10月27日)

入力できる範囲

入力項目
項目範囲初期値
変換の向きUnix 時刻(秒)から日本時間へ / 日本時間から Unix 時刻へUnix 時刻(秒)から日本時間へ
Unix 時刻(秒)0〜99,999,999,999秒1,000,000,000秒
日本時間: 年1,970〜5,000年2,001年
日本時間: 月1〜12月1月
日本時間: 日1〜31日1日
日本時間: 時0〜23時9時
日本時間: 分0〜59分0分
日本時間: 秒0〜59秒0秒

結果は、同じ条件なら本サイトのどのページでも同じ数字になります(ページの数字も、計算ツールも同じ計算の仕組みで出しています)。

ご利用にあたって

  • POSIX の定義どおりうるう秒は数えません。うるう秒を含む厳密な時刻差や、天文・測地用の時刻の計算には使えません。1970 年 1 月 1 日 00:00:00 UTC より前(負の値)も扱いません。
  • ミリ秒やマイクロ秒の値は、秒に直してから入れてください(13 桁なら 1000 で割る)。日本時間以外のタイムゾーンは扱いません。
  • ログの解析・システム開発での最終的な確認は、お使いの言語やデータベースの日付機能でも行ってください。