Rails、activerecord 和 MySQL 将以 UTC 格式保存所有时间戳字段。无需您做任何事情。
在application.rb
完成应用程序配置的文件中,如果您希望在不同于 UTC 的时区显示时间戳,则定义默认时区。
因此
config.time_zone = 'Central Time (US & Canada)'
将使用中央时间显示时间戳字段(无需您在其他代码中执行任何特殊操作)。
当您希望每个用户的时间戳显示在不同的时区时,您可以将时区存储在用户数据旁边的列中。该列可以被调用time_zone
,并且可以包含用户首选时区的字符串。
但是,您必须告诉时间戳对象将自身显示到特定时区。in_time_zone(timezone)
这是在DateTime 对象响应的方法的帮助下完成的。
示例(默认时区为 UTC 时):
1.9.3-p194 :004 > d = DateTime.new(2012, 9, 1, 6, 30, 0)
=> Sat, 01 Sep 2012 06:30:00 +0000
1.9.3-p194 :005 > d.in_time_zone("Central Time (US & Canada)")
=> Sat, 01 Sep 2012 01:30:00 CDT -05:00
或者,您可以在 before 或 around 过滤器上全局更改手头请求的时区。如果您对此进行谷歌搜索,则互联网上有一个文档。
另请阅读以下内容:http ://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html
,了解解决问题的各种替代方法。