私のアプリは「モスクワ」(+04:00) タイムゾーンで動作しています。ただし、ローカル時間 (たとえば、「01 may 2012 13:45」) と ActiveSupport::TimeZone オブジェクトの名前 (たとえば、「Berlin」: 夏時間の +02:00 と +01:それ以外の場合は 00)。
たとえば、入力として "01 may 2012 13:45" と "Berlin" を取得した場合、"2012-05-01 13:45:00 +0200" または "2012-05-01 11:45:00 + 0000」。次の関数を作成します。
def from_local_datetime(local_datetime, time_zone)
offset = Time.now.in_time_zone(time_zone).formatted_offset
datetime = case local_datetime
when String
DateTime.parse(local_datetime)
else
DateTime.new(local_datetime)
end.change(:offset => offset)
return datetime
end
そして、一見すると、期待どおりに機能します。しかし、この種のタスクのベスト プラクティスはありますか? 状況によってはエラーが発生する可能性があります。よくわかりません。
どんなコメントでも大歓迎です。
UPD: DST が時間を変更する時間についてバグが発生する可能性があると思います。たとえば、2011 年 3 月 26 日はベルリンのタイム ゾーンでは GMT+1 で、Time.now.in_time_zone("Berlin").formatted_offset
"GMT+1" を返しますが、2011 年 3 月 27 日では GMT+2 にfrom_local_datetime("28 march 2011", "Berlin")
なります28 march 2011 00:00:00 +0100
。私の関数が返す時間28 march 2011 00:00:00 +0200
:(