Ruby Snippets

Ruby の Unix タイムスタンプ スニペット

Unix 秒の取得、ミリ秒の導出、タイムスタンプの Time オブジェクトへの変換、UTC 出力の整形、日付文字列の解析を行う Ruby の例。

Current Unix timestamp (seconds)
Time.now.to_i
Current Unix timestamp (milliseconds)
(Time.now.to_f * 1000).round
Time from Unix timestamp
Time.at(1700000000)
Time in specific timezone
require "time"
Time.at(1700000000).utc.strftime("%Y-%m-%d %H:%M:%S")

# With tzinfo gem:
require "tzinfo"
tz = TZInfo::Timezone.get("America/New_York")
tz.utc_to_local(Time.at(1700000000).utc)
Formatted string
Time.at(1700000000).strftime("%Y-%m-%d %H:%M:%S")
Timestamp from Time
require "time"
Time.parse("2023-11-15T06:13:20Z").to_i

Ruby のタイムスタンプの基本

Ruby の Time.now.to_i は Unix 秒を返します。秒の小数が必要なとき、または JavaScript 風のタイムスタンプを期待する API のためにミリ秒を計算したいときは Time.now.to_f を使います。

Ruby の Time の変換と整形

Unix 秒から Time オブジェクトを作るには Time.at(timestamp) を使います。マシンのローカルタイムゾーンに依存しない安定した出力が欲しいときは、整形の前に utc を呼びます。

Ruby の本番運用メモ

Ruby の Time メソッドは簡潔ですが、タイムゾーンの既定はノート PC、サーバー、バックグラウンドワーカーの間で異なることがあります。永続化するタイムスタンプは Unix 秒または UTC 文字列で保持し、アプリのタイムゾーンはプレゼンテーション層で適用します。ユーザー入力を解析するときは、サマータイム規則を誤って推測しないよう、オフセットまたはタイムゾーンを含めます。

  • Unix 秒には Time.now.to_i を使う
  • ミリ秒値には (Time.now.to_f * 1000).round を使う
  • 安定した UTC 出力には Time.at(seconds).utc を使う
  • Time.parse はタイムゾーンまたはオフセットを含む文字列にのみ使う

FAQ

Time.now.to_i はミリ秒を返すのか?
いいえ。Time.now.to_i は整数の Unix 秒を返します。秒の端数が必要な場合やミリ秒を導きたい場合は Time.now.to_f を使ってください。
なぜ整形の前に utc を呼ぶのか?
utc は出力をマシンの現地タイムゾーンに依存しないようにします。ログ、API ペイロード、テストの期待値に役立ちます。
Ruby のタイムスタンプを検証するには?
Time.at(seconds).utc.iso8601 を使い、値をジョブ、API、データベースに書き込む前に、期待する UTC の瞬間と結果を比較します。