CalcTune
🎮
おもしろ · 開発

タイムスタンプ変換

Unixタイムスタンプ(秒・ミリ秒)、ISO 8601、RFC 2822、ローカル日時フォーマットを即座に相互変換します。

検出されたフォーマット: Unix(秒)
計算例を表示中 — 上に値を入力してください
変換結果
Unix(秒)
1700000000
Unix(ミリ秒)
1700000000000
ISO 8601
2023-11-14T22:13:20.000Z
RFC 2822
Tue, 14 Nov 2023 22:13:20 GMT
ローカル時間
11/14/2023, 10:13:20 PM
現在のUnixタイムスタンプ
1774004021

タイムスタンプ完全ガイド:開発者が知っておきたい日時フォーマット

タイムスタンプはソフトウェア開発の基盤となる存在であり、イベントが発生した時刻を記録するための共通言語です。本番環境の問題をデバッグするとき、APIのレスポンスを解析するとき、分散システム間でデータを同期するとき—タイムスタンプフォーマットを相互変換する方法を理解することは、あらゆる開発者にとって欠かせないスキルです。このガイドでは、最も一般的なタイムスタンプフォーマットと、それぞれの関係・用途について詳しく解説します。

Unixタイムスタンプとは

Unixタイムスタンプは、エポック時刻またはPOSIX時刻とも呼ばれ、1970年1月1日00:00:00 UTC(Unixエポック)からの経過秒数を表します。たとえば、タイムスタンプ1700000000は2023年11月14日22:13:20 UTCに対応します。Unixタイムスタンプはデータベース、サーバーログ、API、オペレーティングシステムで広く採用されており、タイムゾーンに依存しない一意で明確な時刻表現を提供します。

よく使われる変形として、ミリ秒単位のUnixタイムスタンプがあります。これは秒値を1000倍したものです。JavaScriptのDate.now()はミリ秒を返す一方、PythonやGoをはじめ多くのサーバーサイド言語やデータベースは秒を基本単位として使用します。この違いを常に意識することが重要で、秒とミリ秒を混同することはソフトウェア開発における最もよくあるタイムスタンプ関連のバグのひとつです。

ISO 8601:国際標準フォーマット

ISO 8601は、日時を人間にも機械にも読みやすい形式で表現するための国際規格です。典型的なISO 8601のタイムスタンプは「2023-11-14T22:13:20Z」のような形式で、Tが日付と時刻を区切り、ZがUTCを示します。日本標準時(JST、UTC+9)は「+09:00」のようなオフセットで表現できるため、国際的なシステムとの連携でも時刻を正確に伝えられます。

ISO 8601は現代のAPI設計、JSONペイロード、データ交換において推奨されるフォーマットです。文化的・地域的な曖昧さがなく、文字列のまま辞書順でソートできるため、ログファイルの整理にも便利です。MM/DD/YYYYとDD/MM/YYYYのような地域依存の形式とは異なり、ISO 8601は世界中で一意に解釈されます。ほぼすべてのプログラミング言語が標準でISO 8601のパースと出力をサポートしています。

RFC 2822:メールとHTTPヘッダー

RFC 2822は、電子メールヘッダーとHTTPプロトコルで使われる日時フォーマットを定義しています。典型的なRFC 2822タイムスタンプは「Tue, 14 Nov 2023 22:13:20 GMT」のような形式です。Unixタイムスタンプよりも人間が読みやすい反面、曜日・月の英語略称を解析する必要があるため実装が複雑になり、現代のAPIでは採用されることが少なくなっています。

RFC 2822タイムスタンプは、メールのDateヘッダー、HTTPのLast-ModifiedヘッダーやExpiresヘッダー、RSSフィードなどで今も広く使われています。多くのプログラミング言語がこのフォーマットを解析できますが、新しい実装ではISO 8601が一般的に推奨されます。

2038年問題

32ビット符号付き整数として保存されたUnixタイムスタンプは、2038年1月19日03:14:07 UTCにオーバーフローします。この瞬間、32ビット符号付き整数の最大値(2,147,483,647)を超えると値が負に折り返し、システムが日付を1901年12月13日と誤認識してしまう可能性があります。これは「2038年問題」または「エポカリプス」と呼ばれています。

現代のほとんどのシステムは64ビットタイムスタンプに移行しており、約2920億年後まではオーバーフローしません。しかし、レガシーな組み込みシステム、IoTデバイス、古いデータベースでは依然として影響を受ける可能性があります。日本でも製造業や公共インフラの組み込み機器にレガシーシステムが残存するケースがあるため、タイムスタンプを保存・処理する開発者は64ビット整数または適切な日時型を使用していることを確認することが推奨されます。

タイムスタンプを扱う際のベストプラクティス

タイムスタンプをソフトウェアで扱う際は、常にUTCで保存・送受信し、ローカル時刻への変換はエンドユーザーへの表示直前に行うことが推奨されます。日本は夏時間を採用していませんが、グローバルなシステムでは夏時間(サマータイム)に起因するバグが頻発します。UTC統一の方針を徹底することで曖昧さが排除され、異なるタイムゾーンのイベントを正確に比較できます。

データ交換やAPIレスポンスにはISO 8601フォーマットを使用することが推奨されます。データベースには、フォーマットされた文字列ではなくネイティブのdatetimeまたはtimestamp型を使用してください。Unixタイムスタンプを扱う場合は、値が秒かミリ秒かをコードやドキュメントに明記し、変換ミスを防ぐことが重要です。こうした小さな取り決めが、後のデバッグの手間を大きく削減します。

よくある変換シナリオ

タイムスタンプの変換が必要な場面は多岐にわたります。Unixタイムスタンプを返す外部APIをローカル日時で表示するアプリと統合するとき、UTCのサーバーログを日本時間に換算しながらデバッグするとき、フォーマットが異なるシステム間でデータを移行するとき、または複数のタイムゾーンで発生したイベントを比較するときなどです。信頼できるタイムスタンプ変換ツールを使用することで、手計算のミスを減らし、特に夏時間の切り替わり時期や複数地域にまたがる作業での変換エラーを防ぐことができます。

よくある質問

秒単位とミリ秒単位のUnixタイムスタンプの違いは何ですか?

秒単位のUnixタイムスタンプは1970年1月1日UTC(エポック)からの経過秒数を表します。ミリ秒タイムスタンプはその1000倍で、より高い精度を提供します。JavaScriptのDate.now()はミリ秒を返し、Pythonやシェルコマンドなど多くのサーバーサイド環境は秒を使用します。桁数で区別できます:秒ベースは現在約17億、ミリ秒ベースは約1兆7000億です。

UnixタイムスタンプをDateTime形式に変換するにはどうすればいいですか?

秒単位の場合は1000を掛けてからDateコンストラクタに渡します。JavaScriptの例:new Date(1700000000 * 1000) は2023年11月14日22:13:20 UTCを返します。このツールを使えば複数フォーマットを同時に確認できます。

ISO 8601とは何ですか?なぜ使うべきなのですか?

ISO 8601は日時表現の国際規格です。「2023-11-14T22:13:20Z」のような形式は、地域による曖昧さがなく、機械で解析でき、文字列のままソートできます。MM/DD/YYYYとDD/MM/YYYYのように地域によって解釈が異なる形式と違い、APIやJSONデータでの使用に適した、普遍的に推奨されるフォーマットです。

2038年問題とは何ですか?

2038年1月19日03:14:07 UTCに、32ビット符号付き整数として保存されたUnixタイムスタンプがオーバーフローし、日付の誤認識が起きる可能性があります。これを「2038年問題」と呼びます。現代のシステムの多くは64ビットタイムスタンプに移行済みですが、レガシーな組み込みシステムや古いソフトウェアでは依然として影響を受ける可能性があります。

このツールはタイムスタンプのフォーマットをどうやって自動判別しますか?

パターンマッチングによってフォーマットを識別します。数値の場合はUnixタイムスタンプとして扱い、1兆を超える値はミリ秒、それより小さい値は秒として解釈します。「YYYY-MM-DD」のような日付パターンで始まる文字列はISO 8601、曜日の略称(例:「Tue,」)で始まる文字列はRFC 2822として認識します。