計算方法と根拠
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 で割る)。日本時間以外のタイムゾーンは扱いません。
- ログの解析・システム開発での最終的な確認は、お使いの言語やデータベースの日付機能でも行ってください。