0Pricing
Ruby Academy · レッスン

タイムゾーン

タイムゾーンを扱います。

「タイムゾーン」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 時刻と日付のクラス
  2. 解析とフォーマット
  3. 時刻の算術演算
  4. タイムゾーン
← Ruby Academyに戻る