Dateオブジェクトにタイムゾーンを付与する

in_time_zone メソッドを使う

Date.new(2022, 7, 1).in_time_zone
=> Fri, 01 Jul 2022 00:00:00.000000000 JST +09:00

in_time_zone はActive Supportに定義されているメソッド https://github.com/rails/rails/blob/main/activesupport/lib/active_support/core_ext/date_and_time/zones.rb

日付変換には to_time というメソッドもあるが、こちらは環境のタイムゾーンに準拠している

通常はRailsのタイムゾーンに準拠している in_time_zone を使う

YAMLの日付を表す文字列を読み込んだときの動き

config gemsのSettings.ymlに定義した値を読み出すときにおやっとなった挙動があったのでメモ

cf. https://twitter.com/sanfrecce_osaka/status/1540318072770539520

YAML.safe_load("foo: 2022-01-01")
# =>  Tried to load unspecified class: Date (Psych::DisallowedClass)

文字列で定義したと思っていた日付がDateクラスとして扱われています

以下のように日付の部分をクォートで囲うと期待どおりの日付の文字列を得ることができます

YAML.safe_load("foo: '2022-01-01'")
# => {"foo"=>"2022-01-01"}