ログやAPIのタイムスタンプを読む
ログ、データベース、JWTの有効期限のフィールド、APIのレスポンスでは、時刻を1970年1月1日(UTC)からの秒数(またはミリ秒数)で保存しています。貼り付ければ、UTCと手元のタイムゾーンでの日時がわかります。単位は桁数から判別するので、1730000000も1730000000000も正しく変換されます。
秒、ミリ秒、マイクロ秒、ナノ秒のUnixタイムスタンプを読める日時に、日時をタイムスタンプに。どのタイムゾーンでも変換できます。
現在のUnixタイムスタンプ
0
値を入力すると結果が表示されます
ログ、データベース、JWTの有効期限のフィールド、APIのレスポンスでは、時刻を1970年1月1日(UTC)からの秒数(またはミリ秒数)で保存しています。貼り付ければ、UTCと手元のタイムゾーンでの日時がわかります。単位は桁数から判別するので、1730000000も1730000000000も正しく変換されます。
タイムスタンプにはタイムゾーンがありません。どこでも同じ瞬間を表し、変わるのは表示だけです。好きなタイムゾーンを選べば夏時間も含めた現地時刻がわかり、コード用にISO 8601の形式でコピーできます。日本時間(JST)はUTC+9です。タイムスタンプを符号付き32ビット整数で保存しているシステムは2038年1月19日3時14分7秒(UTC)で止まりますが、64ビットならその上限はありません。
REST APIでは、書式付きの日付の文字列ではなくUnixタイムスタンプがよく使われます。タイムゾーンに依存せず、あいまいさがなく、コンパクトで、数値として比べやすいからです。1742045400のようなタイムスタンプは、サーバーやクライアントがどこにあっても、まったく同じ意味になります。
秒(Unixの標準)を使うAPIもあれば、ミリ秒(JavaScriptの標準)を使うAPIもあるので、必ずAPIのドキュメントを確認しましょう。見分け方はかんたんで、10桁なら秒、13桁ならミリ秒です。
タイムゾーンがらみのバグは、ソフトウェア開発でもっとも多いバグの1つです。UTCで保存したタイムスタンプは絶対的ですが、ユーザーのタイムゾーンで表示するには時差を知る必要があり、その時差は夏時間で変わります。日本には夏時間がないので気づきにくいのですが、海外のユーザーやサーバーが関わると問題になります。
ベストプラクティスは、タイムスタンプを常にUTC(またはUnixタイムスタンプ)で保存し、表示するときだけローカル時刻に変換することです。タイムゾーンの情報なしにローカル時刻を保存してはいけません。
現在のタイムスタンプの取得:JavaScriptでは、Date.now()がミリ秒を返すので、秒にはMath.floor(Date.now()/1000)を使います。Pythonのtime.time()は秒を浮動小数点数で返し、PHPのtime()は秒を、JavaのSystem.currentTimeMillis()はミリ秒を返します。
タイムスタンプから日時への変換:JavaScriptはnew Date(timestamp * 1000)、Pythonはdatetime.fromtimestamp(timestamp)、PHPはdate('Y-m-d H:i:s', timestamp)、SQLはMySQLならFROM_UNIXTIME(timestamp)、PostgreSQLならto_timestamp(timestamp)です。
Unixタイムスタンプ(秒かミリ秒)を貼り付けて読める日時に変換するか、日時を入力して対応するタイムスタンプを求めます。
タイムゾーンを選ぶと、その地域の正しい時刻で日時が表示されます。初期設定では、お使いの端末のタイムゾーンを自動で使います。
結果は複数の形式(ローカル、ISO 8601、UTC、相対時間)で表示されます。各形式のコピーボタンでコピーできます。
Unixタイムスタンプ(秒、ミリ秒、マイクロ秒、ナノ秒)を読める日時に、日時をタイムスタンプに変換します。
タイムゾーン(お使いの端末のもの、UTC、東京、ニューヨークなど)を選ぶと、表示される日時にも入力する日時にも、夏時間も含めて反映されます。
かんたん・すばやいファイルやデータが端末から出ることはありません。処理はすべてブラウザ内で行われます。
本番環境のログからコピーしたタイムスタンプも、端末の中で変換され、ほかのどこにも送られません。
ブラウザ内で完結Unixタイムスタンプ変換について知っておきたいこと