Unix タイムスタンプ コード スニペット
9 つのプログラミング言語とデータベースで Unix タイムスタンプを扱うためのすぐ使えるコード。現在のタイムスタンプの取得、日付への変換、出力の整形を扱います。
これらのコード例について
すべての例で、秒単位の Unix タイムスタンプのサンプルとして 1700000000 を使います。これは 2023 年 11 月 15 日 06:13:20 UTC に相当します。ご自身のタイムスタンプに置き換えてください。ミリ秒を示す例では 1700000000000(同じ瞬間 × 1000)を使います。
言語ごとの秒 vs ミリ秒
最も多い間違いは秒とミリ秒の取り違えです。このクイックリファレンスを使ってください:
- ミリ秒(× 1000):JavaScript Date.now()、Java System.currentTimeMillis()、C# DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
- 秒(JS と比べるには ÷ 1000):Python time.time()、PHP time()、Go time.Now().Unix()、Ruby Time.now.to_i、Rust SystemTime::now().as_secs()
- SQL:MySQL UNIX_TIMESTAMP() → 秒;PostgreSQL EXTRACT(EPOCH) → 小数部付きの秒
これらのスニペットを安全に使うには
各スニペットは、コンソール・マイグレーションスクリプト・テスト・API ハンドラーに貼り付けやすいよう意図的に短くしています。本番で使う前に、タイムスタンプがコードを離れる境界で期待される単位を確認してください。あるサービスがミリ秒を送り、別のサービスが変換せずに秒で保存すると、多くのバグが起こります。
- ブラウザ・フロントエンドのコードでは、API ドキュメントに別の記載がない限りミリ秒を想定する
- バックエンドのコード・ログ・シェルツールでは、通常 Unix 秒が既定
- データベースフィルターでは、すべての行とインデックスで単位を揃える
- 整形出力では、サーバー既定ではなく UTC か明示的な IANA タイムゾーンを使う
信頼できる単一の表現を選ぶ
複数のサービスが同じイベント時刻を扱う場合、1 つの表現を信頼できる基準(source of truth)に決め、境界で変換します。例えばバックエンドは Unix 秒を保存し、フロントエンドは Date 用に 1000 を掛け、レポートは同じ瞬間を UTC か業務タイムゾーンで整形します。