是否有一个ruby脚本或gem用于纠正rails应用程序中的时区错误



我目前正在使用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

相关内容

  • 没有找到相关文章

最新更新