私は文字列の解析に取り組んでおり、問題を引き起こしているテスト ケースがあります。strptime で日付/時刻文字列を解析する場合、夏時間は考慮されません。これは私が知る限りバグです。このバグに関するドキュメントが見つかりません。Rails コンソールでのテスト ケースを次に示します。これは ruby 1.9.3-p215 と Rails 3.2.2 です。
1.9.3-p125 :049 > dt = DateTime.strptime("2012-04-15 10:00 Central Time (US & Canada)", "%Y-%m-%d %H:%M %Z")
=> Sun, 15 Apr 2012 10:00:00 -0600
1.9.3-p125 :050 > dt = DateTime.strptime("2012-04-15 10:00 Central Time (US & Canada)", "%Y-%m-%d %H:%M %Z").utc
=> Sun, 15 Apr 2012 16:00:00 +0000
1.9.3-p125 :051 > dt = DateTime.strptime("2012-04-15 10:00 Central Time (US & Canada)", "%Y-%m-%d %H:%M %Z").utc.in_time_zone("Central Time (US & Canada)")
=> Sun, 15 Apr 2012 11:00:00 CDT -05:00
ご覧のとおり、DST を適切に解釈するには、utc に変換してからタイムゾーンに戻す必要がありますが、時刻も 1 時間ずれているため、文字列から解析したものではありません。誰かがこのバグの回避策、または日付 + 時間 + タイムゾーンを確実に解析して、夏時間が適切に表される DateTime オブジェクトにするより堅牢な方法を持っていますか? ありがとうございました。
編集:わかりました、回避策を見つけましたが、それがどれほど堅牢かはわかりません。
次に例を示します。
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse "2012-04-15 10:00"
これにより、日付/時刻文字列が正しいタイムゾーンに解析されます。これを処理するための parse メソッドがどれほど堅牢かはわかりませんので、より良い回避策があるかどうかを確認したいと思いますが、これは今のところ私の方法です。