我目前正在使用rails 3.0.x应用程序,该应用程序最近从rails 2.x升级。最近,人们发现我们在MySQL中的时间戳已经从用PST时区偏移写成了UTC偏移量。
在研究了这个问题之后,我们决定把所有的时间戳都保持在UTC格式上。不幸的是,我们需要检查所有在PST中有时间戳的旧记录,并将它们转换为UTC (一个有点复杂的过程)。如果可能的话,我宁愿不要重新发明轮子,这就引出了我的问题:
曾经编写过实用程序来处理MySQL数据库?的PST时间戳到UTC时间戳的转换。
发布于 2011-12-02 19:55:00
这就是为什么您总是在UTC中节省时间,并在需要时在用户的本地时间呈现它们。很抱歉你不得不找出困难的方法!
您可以做的是记下发生转换的id值,然后使用MySQL中的Z()方法调整该时间间隔之前的所有时间戳。
每一张桌子都是这样的:
# 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])
endhttps://stackoverflow.com/questions/8361701
复制相似问题