PC・モバイルのトラブル
Unix Timestampを日付に変換:秒・ミリ秒とUTC
Unix timestampを日付へ変換する。秒とミリ秒、UTCとローカル時刻、ISO 8601、日付をepochへ戻す手順を説明する。
Unix timestampはUnix epoch、すなわち1970-01-01 00:00:00 UTCからの時間を表す。epochからの秒、またはミリ秒として保存されることが多い。
正しく変換するには、まず単位を知る必要がある。1720000000秒は2024-07-03 09:46:40 UTCだ。1720000000000ミリ秒は同じ瞬間である。
timestampが指すのは一つの瞬間だ。UTC、ローカル時刻、IANAゾーンは、その瞬間の見せ方だけを変える。
これは変換ガイドだ。timestampから日付、日付からtimestamp、UTCとローカル、ISO 8601。値が突然1970年になるなら、多くは秒とミリ秒の不一致だ。Unix Timestampの秒とミリ秒:日付が1970年になる理由。
Unix timestampとは何か
Unix timestamp、Unix time、epoch timeは、ふつう1970-01-01 00:00:00 UTCからの経過時間を意味する。数字そのものは、タイムゾーン名の付いた日付文字列ではない。同じ瞬間でも、UTC、ニューヨーク、東京、ソウルでは時計の表示が変わり得る。Unix timestampが常に秒だとは限らない。実務ではミリ秒もよく使う。
Unix epochとは何か
Unix epochは1970-01-01 00:00:00 UTCである。timestamp 0がその瞬間だ。正のtimestampはepochより後。一部のシステムはepochより前を負のtimestampで表せるが、言語や日付範囲の対応は異なる。
自分のtimestampは秒かミリ秒か
1720000000は秒、1720000000000はミリ秒で、同じ瞬間だ。実務上の手がかり:およそ10桁なら秒、およそ13桁ならミリ秒が多い。桁数は目安にすぎない。過去や未来、別の単位、独自のepochでは見た目が変わる。日付・時刻コンバーターは秒、ミリ秒、自動(10桁以下を秒、13桁以上をミリ秒)で変換できる。単位が分かっているなら自分で選ぶ。
単位を間違えると日付がずれる理由
JavaScript Dateはミリ秒を期待する。1720000000をミリ秒として渡すと1970-01-20 21:46:40 UTCになる。ミリ秒を秒として扱う、またはその逆だと、まったく別の日付になる。1970年の切り分けはUnix Timestampの秒とミリ秒:日付が1970年になる理由。
new Date(1720000000);
// 1970-01-20T21:46:40.000Z
秒のUnix timestampを変換する方法
秒に1000を掛けるとミリ秒になる。JavaScript Dateはミリ秒ベースなので、new Date(timestamp * 1000)を使う。
const timestamp = 1720000000;
const date = new Date(timestamp * 1000);
date.toISOString();
// 2024-07-03T09:46:40.000Z
ミリ秒のtimestampを変換する方法
ミリ秒はそのままDateに渡す。ミリ秒のtimestampに再度1000を掛けてはいけない。
const timestamp = 1720000000000;
const date = new Date(timestamp);
date.toISOString();
// 2024-07-03T09:46:40.000Z
同じtimestampが別の時刻に見える理由
Unix timestampは一つの瞬間だ。UTC、ローカル、選んだIANAゾーンで表示すると、時計の数字が変わる。1720000000000のUTCは2024-07-03 09:46:40。その日のAmerica/New_Yorkは2024-07-03 05:46:40(EDT)。Asia/Seoulは2024-07-03 18:46:40(UTC+9)。ニューヨークとソウルの値はIntlから得たもので、固定オフセットの標語ではない。
Unix timestampにタイムゾーンは入っているか
入っていない。America/New_YorkもAsia/Seoulも保存しない。timestampが指すのは瞬間だ。タイムゾーンは、その瞬間を人が読む日付と時刻に整形するときに適用する。epochはUTCを基準に定義されるが、数字そのものが「UTCタイムゾーンの欄」なのではない。
Unix timestampとISO 8601
1720000000と2024-07-03T09:46:40Zは同じ瞬間を表し得る。Unixは経過時間の数値だ。ISO 8601は読みやすい日付時刻の文字列で、末尾がZ(UTC)または数値オフセットになり得る。ZはUTCを意味し、Zuluとも呼ばれる。同じ形式ではない。
現在のUnix timestampの取り方
JavaScriptではDate.now()がミリ秒。Math.floor(Date.now() / 1000)が秒。記事に「いま」を固定書きしてはいけない。動き続ける。
Date.now();
Math.floor(Date.now() / 1000);
日付をUnix timestampに戻せるか
戻せる。明示的なUTCのISO文字列からgetTime()はミリ秒、1000で割って切り捨てれば秒。
const date = new Date("2024-07-03T09:46:40Z");
date.getTime();
// 1720000000000
Math.floor(date.getTime() / 1000);
// 1720000000
曖昧な日付形式に注意する
03/07/2024は、ロケールによって3月7日にも7月3日にもなる。タイムゾーンまたはオフセット付きのISO形式を優先する。日付・時刻コンバーターは01/02/2026のような曖昧な数字日付を拒み、日付ピッカーかISO形式を求める。
夏時間はどう扱うか
Unix timestampはDSTフラグを持たない。ローカル表示のとき、ゾーンの規則が適用される。America/New_Yorkは冬と夏でオフセットが違うので、「ニューヨークはUTC-5」が通年で正しいわけではない。
Unix timestampにうるう秒は含まれるか
一般的なPOSIX/Unix timeは、うるう秒を連続したSI秒として余分に数えない。プラットフォームで差が出ることがある。日常の変換では、この細部は無視してよい。
Unix timestamp変換でよくある誤り
次の取り違えは、誤った日付や誤った時計表示を生む:
秒をミリ秒として扱う
最近の秒の値が、JavaScript Dateでは1970年付近になる。
ミリ秒を秒として扱う
日付が遠い未来へ飛ぶ。
10桁や13桁を法則だと思う
桁数は手がかりであり、保証ではない。
UTCとローカル時刻を混同する
瞬間は同じで、見える時計だけが違うことがある。
数字の中にタイムゾーンがあると思う
IANA名は表示時に適用され、timestampには保存されない。
曖昧な日付、DSTの標語、余分な×1000
ISO形式で入力する。ミリ秒のtimestampに再度掛けてはいけない。
検証済みのUTC例
次のUTC時計時刻は計算したもので、推測ではない:
| 入力 | 単位 | UTC |
|---|---|---|
| 0 | 秒 | 1970-01-01 00:00:00 |
| 1720000000 | 秒 | 2024-07-03 09:46:40 |
| 1720000000000 | ミリ秒 | 2024-07-03 09:46:40 |
| 1720000000 | ミリ秒 | 1970-01-20 21:46:40 |
変換の簡単な判断ガイド
ソースが単位を書いていればそれを使う。なければ桁数が手がかり——そのうえで日付が妥当か見る。APIがミリ秒を求めるなら秒をミリ秒へ変換する。表示はUTC、ローカル、IANAゾーンから選ぶ。ISO 8601は保存と交換に向く。
- Unix timestampがある
- 単位は明示されているか。あればそれを使う。なければ桁を見る
- 秒か。APIがミリ秒なら×1000
- ミリ秒か。ミリ秒APIならそのまま
- UTC、ローカル、IANAゾーンで表示
- 文字列が必要ならISO 8601が合うことがある
timestampが指すのは時点だ。UTC、ローカル、タイムゾーンは、その瞬間を人にどう見せるかを決めるだけだ。
ブラウザでUnix timestampを変換する
NEXNARA 日付・時刻コンバーターはUnixの秒とミリ秒を変換し、UTC、ローカル時刻、ISO 8601を表示し、IANAタイムゾーン間も変換する。
Unixモードは秒、ミリ秒、自動単位、現在時刻、日付からtimestampに対応する。タイムゾーンモードはIANA名を検索し、ブラウザのゾーンを使い、夏時間を踏まえたIntlオフセットを適用する。形式モードはロケールで読める出力、12/24時間表示、曖昧日付のガードがある。日付差は別モードだ。
変換はブラウザのDateとIntl APIを使う。Dateが表せない値は拒否される。自動単位は11〜12桁を推測しない。秒かミリ秒かを選ぶ。
日付とtimestampの変換そのものはブラウザ内で行う。変換のために入力をNEXNARAサーバーへ送らない。広告や他のサイト機能はネットワークを使う。
日付・時刻コンバーターにtimestampを貼り、単位を決める前にUTC、ローカル時刻、ISO 8601を比べてほしい。
FAQ
Unix timestampを日付に変換するには?
単位を知る。JavaScriptで秒ならnew Date(n * 1000)。ミリ秒ならnew Date(n)。その後UTC、ローカル、ゾーンで整形する。
Unix timestampは秒かミリ秒か?
どちらもあり得る。およそ10桁は秒、およそ13桁はミリ秒が多いが、それは目安であり規則ではない。
timestampが1970年になるのはなぜ?
秒の値をミリ秒として読んだことが多い。Unix Timestampの秒とミリ秒:日付が1970年になる理由。
Unix timestampは常にUTCか?
epochはUTCを基準に定義され、数字は瞬間を指す。表示タイムゾーンは別だ。「UTCタイムゾーン欄」として保存されているわけではない。
Unix timestampにタイムゾーンは含まれるか?
含まれない。IANA識別子は持たない。タイムゾーンは瞬間を整形するときに適用する。
日付をUnix timestampに変換するには?
UTCのISO文字列からdate.getTime()がミリ秒、Math.floor(date.getTime() / 1000)が秒。