秒とミリ秒の違い
1777118400
1777118400000
上の値を秒、下の値をミリ秒として解釈すれば、どちらも同じ瞬間を表します。この単位の取り違えはタイムスタンプ周りで一番よくあるバグです。
Unixタイムスタンプ、ISO 8601、UTC、ローカル時刻を相互変換。
最終更新
177724017017772401700002026-04-26T21:49:30.000Z2026-04-26 21:49:30Sun, 26 Apr 2026 21:49:30 GMTUnixタイムスタンプ変換ツールは、ある瞬間を表す1つの数値「*エポック秒*」を人間が読める日付に変換し、また日付からタイムスタンプへ戻すツールです。タイムスタンプは開発の至るところに登場します。DBのカラム、ログの行、APIレスポンス、アナリティクスのイベント、JWTのexpクレーム、スケジューラのトリガー、キャッシュ有効期限のヘッダーなど、挙げればキリがありません。
仕組みはシンプルで、コンピュータは時刻を「1970-01-01 00:00:00 UTCからの経過秒数(またはミリ秒)」という数値で扱います。一方、人間にはカレンダーやタイムゾーン、読みやすい書式が必要です。両者を行き来する変換は、Webやモバイルアプリのデバッグで最も頻繁に出てくる作業のひとつです。
一番ややこしいのは*単位*です。POSIXや多くのバックエンド言語は秒を使い、JavaScript・Java・多くのメッセージブローカーはミリ秒を使います。メトリクス系ではマイクロ秒やナノ秒もあります。目安として、10桁の数値はほぼ秒、13桁の数値はほぼミリ秒です。
1970-01-01 00:00:00 UTC)からの経過時間を*秒*または*ミリ秒*で表したもの。2026-04-25T12:00:00Z)は移植性の高いテキスト形式。末尾のZ(または+00:00)はUTC、+02:00のようなオフセットはUTCより2時間進んだローカルタイムを意味する。数値(秒またはミリ秒)か日付文字列を貼り付けます。桁数や形から書式を自動判定します。
自動判定が外れた場合は、秒とミリ秒のトグルで切り替えます。10桁なら秒、13桁ならミリ秒が目安です。
出力にはUTCのISO 8601、ローカルタイム、相対時間(3 hours ago、in 2 days)が並んで表示されます。
タイムスタンプ・ISO文字列・ローカルタイムをそのままコピーできます。JWTのexp、DBのレコード、ログ検索のクエリに貼り付けるのに便利です。
コードで日付・時刻を扱うときによく見かける書式をまとめました。ISO 8601はIETFのRFC 3339としてプロトコル向けにプロファイル化もされています。
| 書式 | 例 | よく見る場所 |
|---|---|---|
| Unix秒 | 1777118400 | バックエンドのログ、JWTのexp、POSIXのtime()、Redis |
| Unixミリ秒 | 1777118400000 | JavaScriptのDate.now()、JavaのSystem.currentTimeMillis() |
| ISO 8601 UTC | 2026-04-25T12:00:00Z | REST API、JSON、GraphQL、ログファイル |
| オフセット付きISO 8601 | 2026-04-25T14:00:00+02:00 | ユーザー向けの予約・予定、カレンダー招待 |
| RFC 2822 | Sat, 25 Apr 2026 12:00:00 GMT | メールヘッダー、HTTPのDate・Last-Modified |
| 日付のみ | 2026-04-25 | 誕生日や祝日など。タイムゾーンの意味は持たない |
1777118400
1777118400000
上の値を秒、下の値をミリ秒として解釈すれば、どちらも同じ瞬間を表します。この単位の取り違えはタイムスタンプ周りで一番よくあるバグです。
{ "id": 42, "createdAt": 1777118400, "expiresAt": 1777204800}過去か未来かを判断する前に、まずそれぞれの値を変換してみましょう。多くのJSON APIはUnix秒ですが、ドキュメントの確認は必須です。JavaScript色の強いバックエンドではミリ秒で返ってくることもよくあります。
2026-04-25T12:00:00Z
2026-04-25T14:00:00+02:00
この2つの文字列は*まったく同じ瞬間*を表します。保存するときは常にUTC、表示するときだけローカルタイムに整形するのが基本です。
1700000000を秒として読むと2023年11月ですが、ミリ秒として読むと1970年1月になります。'2026-04-25'など)同士を比較する。同じ瞬間を表すISO文字列でも書式が違うことがあるので、比較はタイムスタンプで行うべき。1970-01-01 00:00:00 UTCからの経過秒数(またはミリ秒数)のことです。タイムゾーンに依存せず、特定の瞬間をたった1つの数値で表せます。Date.now()はミリ秒を返しますが、多くのバックエンドは秒を返します。Dateオブジェクトは、Unixエポックからのミリ秒数でタイムスタンプを保持します。Date.now()やnew Date().getTime()が返す値もこれです。秒より高精度になる反面、他言語と連携するときに「1000倍ズレる」バグの温床にもなりがちです。new Date(...)に渡します。Pythonならdatetime.fromtimestamp(...)を使えばOKです。あるいは、このUnixタイムスタンプ変換ツールに貼り付ければワンクリックで結果が出ます。2038-01-19にオーバーフローします。いわゆる「2038年問題」です。最近の言語やDBはタイムスタンプを64ビット整数で保持しているので、安全に扱える範囲は数千億年単位に広がっています。