タイムゾーン
タイムゾーンを扱います。
「タイムゾーン」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
タイムゾーンが重要な理由
同じ瞬間でも、場所によって異なる時刻として表示されます。タイムゾーンを適切に扱わないと数時間ずれるバグが発生するため、時刻がどのタイムゾーンを使用するかを明示する必要があります。
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.zone || t.utc_offset)
puts(t.utc_offset)UTC: 基準となるタイムゾーン
UTC(協定世界時)は世界共通の基準です。UTC で保存と計算を行い、表示時に変換します。
t = Time.utc(2026, 5, 30, 9, 0, 0)
puts(t.utc?)
puts(t.hour)ローカル時刻
Time.now と Time.local は、コンピューターのローカルタイムゾーンを使用します。UTC からのオフセットは、utc_offset で秒単位で取得できます。
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.utc_offset)
puts(t.utc_offset / 3600)UTC への変換
getutc(別名 utc)は、同じ瞬間を UTC で表した値を返します。時計の表示は変わりますが、瞬間そのものは同一です。
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.hour)
puts(t.getutc.hour)ローカルオフセットへの変換
getlocal は明示的なオフセット文字列を受け取り、そのタイムゾーンで表した瞬間を返します。
t = Time.utc(2026, 5, 30, 9, 0, 0)
istanbul = t.getlocal('+03:00')
puts(istanbul.hour)生成時のオフセット指定
Time.new の最後の引数にオフセット文字列を渡すと、生成時にタイムゾーンを固定できます。
ny = Time.new(2026, 5, 30, 8, 0, 0, '-04:00')
puts(ny.utc_offset / 3600)
puts(ny.getutc.hour)同じ瞬間、異なる時計
異なるタイムゾーンの 2 つの時刻が、まったく同じ瞬間を表すことがあります。比較では基になる瞬間が使用されるため、これらは等しくなります。
a = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
b = Time.new(2026, 5, 30, 9, 0, 0, '+00:00')
puts(a == b)ISO 8601 のオフセット
ISO 8601 のタイムスタンプにはオフセット(たとえば +03:00、または UTC を表す Z)が埋め込まれているため、システム間で曖昧さがありません。
require 'time'
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.iso8601)
puts(t.getutc.iso8601)タイムゾーン付き文字列の解析
Time.parse は、入力文字列に含まれるオフセットを考慮します。
require 'time'
t = Time.parse('2026-05-30T12:00:00+03:00')
puts(t.utc_offset / 3600)
puts(t.getutc.hour)ベストプラクティス: UTC で保存する
最も安全な方法は、UTC で保存し、UTC で算術演算を行い、表示時にだけユーザーのタイムゾーンへ変換することです。これにより、曖昧さを完全に避けられます。
stored = Time.utc(2026, 5, 30, 9, 0, 0)
display = stored.getlocal('+03:00')
puts("UTC #{stored.hour} -> Local #{display.hour}")DST に関する注意
+03:00 のような固定オフセットは夏時間を考慮しません。夏時間の規則を持つ名前付きタイムゾーンには、tzinfo gem などのライブラリが必要です。コアの Time クラスが扱えるのは固定オフセットだけです。
t = Time.new(2026, 7, 1, 12, 0, 0, '+02:00')
puts(t.utc_offset / 3600)クイックチェック
アプリケーションでタイムゾーンを扱う際に推奨される方法は何ですか。
まとめ: タイムゾーン
タイムゾーンを適切に扱う方法を学びました。
- UTC は世界共通の基準です
getutcとgetlocalは瞬間を変えずに変換します- オフセットは生成時または ISO 8601 文字列で設定します
- 異なるタイムゾーンの同じ瞬間は、比較すると等しくなります
- UTC で保存し、ローカル時刻で表示します。固定オフセットは DST を考慮しません
require 'time'
puts(Time.utc(2026,5,30,9).getlocal('+03:00').hour)よくある質問
「タイムゾーン」レッスンは無料ですか?
はい。「タイムゾーン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「タイムゾーン」で何を学びますか?
タイムゾーンを扱います。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「タイムゾーン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。