我目前正在使用rails 3.0。X应用程序最近从rails 2.x升级。最近,我们发现MySQL中的时间戳已经从PST时区偏移写入到UTC偏移,这是迁移的结果。
在检查了这个问题之后,我们决定继续使用UTC格式的所有时间戳。不幸的是,我们需要遍历具有PST时间戳的所有旧记录,并将它们转换为UTC(一个有点复杂的过程)。如果可能的话,我宁愿不要重新发明轮子,这就引出了我的问题:
有没有人写了一个实用程序来处理转换的PST时间戳到UTC时间戳的MySQL数据库?
这就是为什么您总是以UTC保存时间并在需要时以用户当地时间呈现它们的原因。抱歉让你这么辛苦才知道!
你可以做的是记下发生转换的id
值,然后在MySQL中使用CONVERT_TZ()方法调整该间隔之前的所有时间戳。
对于每个表,它看起来像这样:
# List of maximum ID to adjust
max_id = {
'examples' => 100,
}
c = ActiveRecord::Base.connection
c.tables.each do |table|
# Set your specific time-zones as required, PST used as an example here.
timestamp_updates = c.columns(table).select do |col|
col.type == :datetime
end.collect(&:name).collect do |col|
"`#{col}`=CONVERT_TZ(`#{col}`, 'PST', 'UTC')"
end
next if (timestamp_updates.empty?)
c.execute("UPDATE `#{table}` SET #{timestamp_updates.join(',') WHERE id<=%d" % max_id[table])
end