Unixタイムスタンプ変換(エポック ⇄ 日時)
入力
| 変換の方向 | エポック → 日時 |
|---|---|
| Unixタイムスタンプ | 1,784,550,784 |
| タイムスタンプの単位 | 秒 |
| 日付 | 2026年7月20日 |
Unixタイムスタンプ変換(エポック ⇄ 日時)
Unixタイムスタンプ(エポック秒・ミリ秒)をUTC日時およびISO 8601形式に変換、またはカレンダー日付からエポック値を求めます。
入力
入力
結果
値を入力すると計算結果が表示されます。
結果
Unixタイムスタンプ(エポック ⇄ 日時)
Unixタイムスタンプは、1970年1月1日 00:00:00 協定世界時(UTC)からの経過秒数を整数で表したものです。タイムゾーンや暦法の違いに左右されない汎用的な時刻表現として、ほぼすべてのオペレーティングシステム、プログラミング言語、データベースで利用されています。このツールは、エポック値と人間が読める日時の相互変換を行います。
Unixエポックの起源
基準点である1970年1月1日 00:00:00 UTCは、1960年代後半のBell Labsにおける初期Unix開発時に設定された歴史的な慣習です。時刻計算の基準として一貫した固定点が必要であり、その具体的な日付自体に特別な意味はありません。この慣習がPOSIX標準に引き継がれ、今日ではほぼすべてのシステムで共有されています。
タイムスタンプ0はエポック時刻そのものを表します。86,400はエポックから1日後(60秒 × 60分 × 24時間)です。負の値は1970年以前の日時に対応し、多くの実装では数千年前まで正確に扱えます。
秒とミリ秒
元来のUnix標準は秒単位です。サーバーログ、データベースレコード、シェルユーティリティなどUnix系ツールの大部分は秒精度のタイムスタンプを使用しており、2000〜2030年代の日時は10桁の値になります。
JavaScriptはミリ秒精度の形式を広めました。Date.now() と Date.getTime() はエポックからのミリ秒数を返し、13桁の値になります。多くのREST API、イベントストリーム、JavaScriptと連携するデータベースもこの形式を採用しています。
実用上の目安として、10桁の値は秒、13桁の値はミリ秒と考えて問題ありません。ミリ秒を秒に変換するには1,000で割ります。このツールで「ミリ秒」を選択すると、自動的に変換が行われます。
変換の仕組み
**エポック → 日時。**秒単位のタイムスタンプ から日時を求める基本式は次のとおりです。
daystime of day=⌊86,400t⌋=tmod86,400日数はユリウス暦と閏年の補正を経てグレゴリオ暦の日付に変換されます。時刻部分は時・分・秒へ順次剰余計算で分解されます。
**日付 → エポック。**UTC深夜0時を基準に、1970年1月1日からの日数を数えて86,400を掛けます。例として2024年1月1日の場合、日数は19,723日(1970〜1999年の10,957日 + 2000〜2023年の8,766日)となり、エポック値は次のようになります。
このツールは内部で標準の日付演算ライブラリを用い、閏年やカレンダーの端数処理を正確に行っています。
2038年問題
多くの旧式システムはUnixタイムスタンプを32ビット符号付き整数で保持しています。32ビット符号付き整数の最大値は2,147,483,647であり、2038年1月19日 03:14:07 UTCに対応します。この時刻以降、カウンタはオーバーフローして最大の負の値に戻り、1901年12月13日頃と誤解釈されます。
64ビット整数を使用する現代のシステムには影響しません。64ビット符号付き整数は過去・未来ともに約2920億年分の範囲を表現できるため、実用上の限界はほぼ存在しません。2038年問題は、更新が済んでいない組み込みシステムや旧式データベース、レガシーライブラリに限定された課題です。主要なOSやプログラミング言語の大部分は、2020年以前に64ビット時刻へ移行しています。
実装上の注意点
**タイムゾーン。**Unixタイムスタンプは常にUTC基準の経過秒数を表し、タイムゾーン情報は含みません。現地時刻からエポックを求める場合は、先にUTCへ変換する必要があります。このツールは日付のみの入力に対してUTC 00:00:00を基準として計算します。
**閏秒。**Unixエポックは閏秒を考慮しておらず、1日を常に86,400秒として扱います。そのため、国際原子時(TAI)との間に累積的なずれ(2026年時点で37秒)が生じます。通常のソフトウェア開発においてこのずれが問題になることはほとんどありません。
**外部システムとの整合。**OSが64ビット時刻に対応していても、サードパーティライブラリ、データベースのカラム型、シリアライズ形式が32ビット整数を使用している場合があります。2038年以降の日時を扱うシステムでは、データの保存幅を確認することが重要です。
よくある質問 (FAQ)
Unixタイムスタンプとは何ですか?
Unixタイムスタンプ(エポック時刻、POSIXタイムスタンプとも呼ばれます)は、1970年1月1日 00:00:00 UTC(Unixエポック)からの経過秒数を整数で表した値です。この基準日は、1960年代後半のBell LabsにおけるUnix開発時に便宜的に定められた歴史的な慣習です。
タイムスタンプは単一の整数であるため、タイムゾーンや暦法の違いに依存しない汎用的な時刻表現として、ほぼすべてのコンピュータシステムで利用されています。人間が読める日時に変換するにはタイムゾーンの指定が必要であり、このツールでは協定世界時(UTC)を使用します。
秒とミリ秒のどちらの値か、どうやって判断すればよいですか?
標準のUnixタイムスタンプは秒単位です。10桁の値(例:1,700,000,000)はほぼ間違いなく秒単位であり、2023年頃の日時に対応します。13桁の値(例:1,700,000,000,000)はほぼ間違いなくミリ秒単位であり、JavaScriptのDate.now()やDate.getTime()、あるいは多くのREST APIやログシステムが返す形式です。
目安として、10桁なら秒、13桁ならミリ秒と判断できます。11〜12桁の値はマイクロ秒など非標準の単位の可能性もあるため、データのソースを確認してください。
2038年問題とは何ですか?
多くの古いシステムではUnixタイムスタンプを32ビット符号付き整数で保持しています。32ビット符号付き整数が表せる最大値は2,147,483,647であり、これは2038年1月19日 03:14:07 UTCに対応します。この時刻を過ぎるとカウンタがオーバーフローし、1901年12月頃の日時として誤解釈されます。
現代のシステムでは64ビット整数を使用しており、数千億年先まで表現可能なため実用上の問題はありません。2038年問題は、更新されていない組み込みシステムや旧式データベース、レガシーライブラリに限定された課題です。主要なオペレーティングシステムやプログラミング言語の大部分は、2020年以前に64ビット時刻に移行済みです。