Unix タイムスタンプを変換する方法

· 5 分で読めます

Unixタイムスタンプは、コンピューターが時刻を保存し通信する方法です。1970年1月1日からの秒数を表す単一の数値です。APIレスポンス、データベースレコード、ログファイル、JWTトークンに現れます。1711824000が実際にどんな日付なのかを知る必要があるとき、コンバーターが必要になります。ブラウザベースのコンバーターは計算を瞬時に処理し、両方向(タイムスタンプから日付、日付からタイムスタンプ)に変換できます。

Unixタイムスタンプの見た目

タイムスタンプ種類人間が読める形式
0Jan 1, 1970 00:00:00 UTC
1000000000Sep 9, 2001 01:46:40 UTC
1234567890Feb 13, 2009 23:31:30 UTC
1711824000Mar 31, 2024 00:00:00 UTC
1711824000000ミリ秒Mar 31, 2024 00:00:00 UTC
2147483647Jan 19, 2038 03:14:07 UTC(32ビット符号付き最大)

秒とミリ秒の違いは、末尾の3つのゼロです。10桁の数値は秒、13桁はミリ秒です。2024年時点で、秒ベースのUnixタイムスタンプはすべて10桁であり、2286年11月までそうあり続けます。

タイムスタンプを変換する手順

  1. タイムスタンプまたは日付を入力: Unixタイムスタンプを貼り付けて読める日付に変換するか、日付を入力してタイムスタンプを取得します。
  2. フォーマットを確認: コンバーターは数値の桁数に基づいて秒とミリ秒を自動検出します。
  3. 結果を読む: ローカルタイムゾーン、UTC、ISO 8601フォーマットでの日付を表示します。

Unix時間の簡単な歴史

Unix時間は、1971年11月にBell Labsで発行されたUnix Programmer's Manualで初めて定義されました。元のエポックは1971年1月1日でしたが、間もなく1970年1月1日に変更され、POSIX.1(1988年)で標準化されました。

1970年の選択は恣意的ですが現実的でした。Unixは1969年から1971年に開発され、OSの誕生近くでカウントを始めるのは理にかなっていました。1970年からの秒数を数える32ビット符号付き整数は、1901年12月から2038年1月までの範囲を提供しました。設計者は十分だろうと考えていました。

そうではありませんでした。「2038年問題」(Y2K38とも呼ばれる)は、32ビット符号付きUnixタイムスタンプがオーバーフローする瞬間です。エポックから2147483647秒後、次の刻みは負の数に折り返し、システムはそれを1901年12月と解釈します。ほとんどのモダンシステムは2000年代と2010年代に64ビット整数タイムスタンプに移行しましたが、一部の組み込み機器、古いデータベース、レガシーファイル形式はまだ32ビット時間を使い、2038年前にパッチが必要です。

Unix時間は現在、コンピューターシステムで時刻を表現する事実上の標準です。JSON API、データベース行のタイムスタンプ、JWTの有効期限、ブロックチェーンのブロック時刻、IoTセンサーの読み取り値。ほぼすべてがUnixエポックを直接または間接的に使います。

秒、ミリ秒、マイクロ秒、ナノ秒

システムによって精度が異なります:

19桁のタイムスタンプは、ミリ秒を期待するコンバーターを混乱させる可能性があります。異常な数値を見たらソースドキュメントを再確認してください。

タイムスタンプに出会う場所

コード内のタイムスタンプ

一般的な言語での素早い変換:

JavaScript:

new Date(1711824000 * 1000)            // 秒から(1000を掛ける)
new Date(1711824000000)                // ミリ秒から
Math.floor(Date.now() / 1000)          // 現在の秒数
Date.now()                             // 現在のミリ秒

Python:

from datetime import datetime, timezone
datetime.fromtimestamp(1711824000, tz=timezone.utc)
datetime.now(timezone.utc).timestamp()  # 現在の秒数(浮動小数点)

Bash:

date -u -d @1711824000                 # GNU date(Linux)
date -u -r 1711824000                  # BSD date(macOS)
date +%s                               # 現在の秒数

SQL(PostgreSQL):

SELECT TO_TIMESTAMP(1711824000);       -- エポックをタイムスタンプに変換
SELECT EXTRACT(EPOCH FROM NOW());      -- 現在のエポック

Go:

time.Unix(1711824000, 0)               // 秒から
time.Now().Unix()                      // 現在の秒数

タイムゾーンの扱い

ここはほとんどのタイムスタンプバグが潜む場所です:

APIでタイムスタンプを送るときは、つねにUTC秒を使います。ユーザーに表示するときは、彼らのローカルタイムゾーンに変換します。コンバーターは両方向を扱います。

よくある落とし穴

使いこなしのヒント

プライバシー

Unixタイムスタンプコンバーターは完全にブラウザ内で動作します。入力したタイムスタンプと日付はデバイスを離れません。これは、タイムスタンプが機密になりうるからです。内部インフラのタイミングを露呈するログファイルから来たもの、埋め込みユーザー/セッション情報を含むJWTトークン、第三者と共有すべきでない内部API デバッグなど。クラウドのタイムスタンプコンバーターは「改善」目的で入力をログに記録するかもしれません。ブラウザ専用のコンバーターは露出ゼロです。

ブラウザベースの変換は、ページを一度読み込めばオフラインでも動作し、タイムスタンプをフィールドに入れて同じ瞬間に日付を見られるほど高速です。

よくある質問

Unix エポックタイムとは何ですか?

Unix エポックタイム(POSIX タイムまたは Unix タイムスタンプとも呼ばれます)は、1970 年 1 月 1 日 00:00:00 UTC から経過した秒数のことです。コンピュータが内部的に時刻を表現するための標準的な方法です。

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

秒単位の Unix タイムスタンプは 10 桁です(例:1711824000)。ミリ秒単位は 13 桁です(例:1711824000000)。JavaScript はミリ秒を使い、ほとんどの API やデータベースは秒を使います。コンバーターは桁数で自動的に検出します。

変換した時刻が数時間ずれているのはなぜですか?

タイムスタンプは常に UTC です。コンバーターは UTC とローカルタイムの両方を表示します。結果が予想と一致しない場合、UTC の出力をローカルタイムと比較しているか、その逆になっている可能性が高いです。

2038 年に何が起こりますか?

32 ビット符号付き整数で Unix タイムスタンプを保存しているシステムは、2038 年 1 月 19 日にオーバーフローします。最新のシステムはほとんどが 64 ビット整数を使っており、実用上の懸念をはるかに超える範囲まで拡張されています。