PerlベースのWebアプリケーションをRailsに移行しています。古いアプリケーションは、ローカル(太平洋)時代にMySqlデータベースに日付を格納します。たとえば、created
フィールドの値は06/06/2008 14:00:00
で、2008年6月6日午後2時(PDT)になります。02/02/2002 06:30:00
は2002年2月2日(PST)の午前6時を表します。ローカルのタイムゾーンの日付を新しいRailsアプリケーションに移行する
古いデータをすべて取り出して新しいデータベースにインポートするレーキタスクを作成しました。新しいデータベースの日付がまだの場合は06/06/2008 14:00:00
のようにと表示されますが、私のRailsアプリケーションではUTCと解釈されます。
の移行作業は、次のようになります。
# Migrating old events in Perl application to new events in Rails
oldevents = OldEvent.all
oldevents.each do |oldevent|
newevent = Event.convert_old_event_to_newevent(oldevent)
newevent.save!
end
興味深いコードは、静的メソッドEvent.convert_old_event_to_newevent
である:
def Event.convert_old_event_to_newevent(oldevent)
...
# If the "created" field in the old db contains '06/06/2008 14:00:00' (meaning
# 2:00 PM PDT (since June is during daylight savings time) then the
# "created_at" field in the new database will contain the same string which
# Rails interprets as 2:00 PM GMT.
newevent.created_at = oldevent.created
...
return newevent
end
ので、移行プロセスでは、新しいデータベースで日付を格納する前に私は古いデータベースから日付/時刻を読んで、それらをUTCに変換し、それを新しいデータベースに保存する必要があります。
どうすればできますか?
「TZ = PST rake initdb:import」という行は確実に機能しますか?古いデータベースの日付と時刻は、夏時間と非夏時間の両方で年間を通じて発生します。 PSTは夏時間以外ではありませんか? – rlandster
あなたが心配しているのなら、** TZ = PST8PDT ruby ** * blah blah *と言うだけですが、私はかなり確信しています** PST **は** PST8PDT **のエイリアスです。 – DigitalRoss