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は瞬間であり、表示形式ではない

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)が秒。

PC・モバイルのトラブル

Unix Timestampの秒とミリ秒:日付が1970年になる理由

Unix timestampを日付にすると1970年付近になる場合、秒をミリ秒として読んでいることがよくあります。単位の見分け方を解説します。

PC・モバイルのトラブル

スクリーンショットの JPG と PNG、どちらが小さい?

スクリーンショットは中身で JPG か PNG を選ぶ。UI と文字は PNG の方がシャープなことが多く、写真が多い画面は JPEG の方が小さくなることがある。

PC・モバイルのトラブル

JSON.parseが「Unexpected token」と言うのはなぜ?

テキストが有効なJSONでないとき、JSON.parseはUnexpected tokenを投げる。単引用符、末尾カンマ、HTML応答、エラー位置を切り分ける。

PC・モバイルのトラブル

画像をぼやけさせずにファイルサイズを減らす方法

見た目の品質を保ちながら、写真や画像のファイルサイズを減らします。過大なピクセルを先にリサイズし、ほどよい圧縮をかけ、合う形式を選びます。

PC・モバイルのトラブル

なぜBase64にするとファイルが大きくなるのか

Base64はバイナリをだいたい3分の1ほど大きくします。3バイトが4文字になる構造、パディング、Data URLのオーバーヘッド、その増加が見合うときを確認します。