将本地时区日期迁移到新的Rails应用程序中

时间:2011-01-16 18:21:33

标签: ruby-on-rails datetime timezone

我正在将基于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,然后将其存储在新数据库中。

怎么办呢?

1 个答案:

答案 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)