我正在将基于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日上午6点(太平洋标准时间)。
我编写了一个rake任务来获取所有旧数据并将其导入新数据库。新数据库中的日期看起来像<{1}} ,但当然,我的Rails应用程序将其解释为UTC。
迁移任务如下所示:
06/06/2008 14:00:00
有趣的代码在静态方法# 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
因此,在迁移过程中,在将日期存储在新数据库之前,我需要从旧数据库中读取日期/时间,将它们转换为UTC,然后将其存储在新数据库中。
怎么办呢?
答案 0 :(得分:0)
>> Time.local(*'06/06/2008 14:00:00'.split(/[:\/ ]/).values_at(2,0,1,3..5)).utc
=> Fri Jun 06 21:00:00 UTC 2008
这显然会返回一个Ruby核心库Time
对象,可以按照您喜欢的方式进行格式化。
如果您的时区不是太平洋,请运行您的rake导入任务,如:
$ TZ=PST rake initdb:import # whatever
现在,Rails定义了一个你可能需要的名为DateTime的类型,它需要真正的整数参数,所以:
DateTime.civil_from_format :local, *'06/06/2008 14:00:00'.split(/[:\/ ]/).map(&:to_i).values_at(2,0,1,3..5)