Ruby の Unix タイムスタンプ スニペット
Unix 秒の取得、ミリ秒の導出、タイムスタンプの Time オブジェクトへの変換、UTC 出力の整形、日付文字列の解析を行う Ruby の例。
Current Unix timestamp (seconds)
Time.now.to_iCurrent Unix timestamp (milliseconds)
(Time.now.to_f * 1000).roundTime 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_iRuby のタイムスタンプの基本
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 の瞬間と結果を比較します。