エポック時間を読みやすい日付に変換する方法
Unix タイムスタンプを日付に変換するのは2ステップ——数値を UTC の瞬間として解釈し、その瞬間を表示したいタイムゾーンでフォーマットするだけ。このガイドではメンタルモデル、秒とミリ秒の見分け方、UTC かローカルかの判断を説明し、言語別レシピと変換ツールへ案内します。
エポック時間から日付は2ステップ
エポックのタイムスタンプを読みやすい日付に変換するのは、常に同じ2ステップです:数値を UTC の瞬間として解釈し、その瞬間を表示したいタイムゾーンでフォーマットします。数値そのものはタイムゾーンを持たず——単一の瞬間です——同じ値でもフォーマットするゾーンによって異なる壁時計時刻(ときには異なる暦日)として表示されます。下の表は1つのタイムスタンプを複数のゾーンで表したものです。このガイドの残りでは単位、タイムゾーンの選択、コードを扱います。
| タイムゾーン | 1700000000 のローカル日時 |
|---|---|
| UTC(正準の瞬間) | 2023-11-14 22:13:20 · ISO 2023-11-14T22:13:20Z |
| America/New_York | 2023-11-14 17:13:20 (EST) |
| Asia/Tokyo | 2023-11-15 07:13:20 (JST) |
| Australia/Sydney | 2023-11-15 09:13:20 (AEDT) |
エポック時間とは?
エポック時間(Unix 時間、POSIX 時間とも呼ばれます)は、1970 年 1 月 1 日 00:00:00 UTC からの経過秒数です。コンピューティングで時点を表す世界共通の標準です。あらゆるプログラミング言語と OS がネイティブに対応しており、システム間でタイムスタンプを保存・交換するのに最も信頼できる形式です。
ステップ 1 — 秒かミリ秒かを見分ける
変換の前に単位を判断します。ほぼ常に桁数から読み取れ、これを読み間違えることが誤った日付の最も多い原因です。
- 10 桁(例:1700000000)→ Unix エポックからの秒
- 13 桁(例:1700000000000)→ Unix エポックからのミリ秒
- 16 桁 → マイクロ秒;19 桁 → ナノ秒
- 迷ったら、解釈された年が妥当か確認します——1970 年や遠い未来の日付は単位の読み間違いを意味します
- 上のコンバーターは単位を自動判別します
ステップ 2 — UTC として解釈し、タイムゾーンを選ぶ
Unix タイムスタンプは正確に1つの瞬間へと解釈されます。その瞬間を UTC で表示するかローカルタイムゾーンで表示するかは、数値の性質ではなく表示上の判断です。機械向けのすべて——ログ、API、データベース保存、サーバー間比較——には UTC を選び、人に日付を見せるその瞬間にだけユーザーの IANA タイムゾーンへ変換します。ゾーンは常に IANA 名(America/New_York)で指定し、裸のオフセットでは指定しないでください。そうすれば夏時間が自動で適用されます。
- 機械向け(ログ、API、保存)→ UTC で表示、Z 付きの ISO 8601
- ユーザー向け(締め切り、UI 内のタイムスタンプ)→ ユーザーの IANA タイムゾーンへ変換
- ローカル時刻をゾーンなしで保存しない——UTC と IANA ゾーン名を保存する
コードでの変換
あらゆる現代の言語に、両方のステップをこなす1行の組み込み関数があります。パターンは常に同じです:関数が期待する単位で値を渡し、UTC か特定のタイムゾーンを要求します。JavaScript などは下に示します。付随するレシピが JavaScript、Python、PHP、Java、C#、Go、SQL、Excel、Google Sheets を完全に扱います。
- JavaScript:new Date(1700000000 * 1000).toISOString() → "2023-11-14T22:13:20.000Z"
- Python:datetime.fromtimestamp(1700000000, tz=timezone.utc).isoformat()
- Shell:date -u -d @1700000000 (GNU) / date -u -r 1700000000 (BSD, macOS)
- SQL:TO_TIMESTAMP(1700000000) (Postgres), FROM_UNIXTIME(1700000000) (MySQL)
- ルール:秒が期待される場所には秒を渡す——× 1000 が要るのは JavaScript の Date だけ
エポック時間の変換でよくある間違い
Unix タイムスタンプを変換するときに最も多い間違いです:
- JavaScript で秒に 1000 を掛け忘れる——new Date(1700000000) は 2023 年ではなく 1970 年になる
- JavaScript のミリ秒を、サーバーサイド言語でそのまま秒として使う(1000 倍の誤り)
- タイムゾーンを指定せず、環境によって異なるサーバーのローカルタイムゾーンに依存する
- タイムスタンプを整数ではなく文字列で保存し、数値比較や演算が壊れる
- Python で非推奨の datetime.utcfromtimestamp() を使う——代わりに fromtimestamp() に tz=timezone.utc を渡す
関連記事
FAQ
- エポック時間を日付に変換するには?
- 値が秒(10 桁)かミリ秒(13 桁)かを見分けてから、言語の日付 API で変換します——JavaScript なら new Date(seconds * 1000)、Python なら datetime.fromtimestamp(seconds, tz=timezone.utc)、または上のコンバーターに貼り付けます。
- Unix タイムスタンプで new Date() が 1970 年になるのはなぜ?
- ミリ秒を期待する関数に秒値を渡したからです。多くは JavaScript の new Date() です。まず 10 桁の秒値を 1000 倍してください。
- エポック時間は UTC とローカル時刻のどちらに変換すべき?
- ログ、API、サーバー間の比較には UTC を使い、ユーザーのローカルタイムゾーンへの変換は表示のときだけにします。エポック値そのものはタイムゾーン中立です。
- JavaScript で Unix タイムスタンプから日付を得るには?
- new Date(seconds * 1000) は Date オブジェクトを返し、toISOString()、toUTCString()、Intl.DateTimeFormat でフォーマットできます。JavaScript の Date はミリ秒を期待し秒ではないため、掛け算が必要です。
- Python で Unix タイムスタンプから日付を得るには?
- タイムゾーン対応の UTC datetime には datetime.fromtimestamp(seconds, tz=timezone.utc) を使います。ローカル時刻なら tz 引数を省き、ISO 8601 文字列が必要なら .isoformat() を付けます。
- 同じエポック値は異なるタイムゾーンで異なる日付になる?
- 瞬間はどこでも同じですが、表示する壁時計の日付はタイムゾーンに依存し——別の暦日になることさえあります。1700000000 はニューヨークでは 11 月 14 日、東京では 11 月 15 日です。
- タイムスタンプを日付に変換するには?
- あらゆる現代の言語に1行の組み込み関数があります。最も難しいのは、タイムスタンプが秒(10 桁)かミリ秒(13 桁)かを見分けることです——単位さえ合えば、変換自体は決して失敗しません。