我在Ruby 1.9.2上有一个Rails 3应用程序,用户可以在其中输入工作时间并将它们存储在MySQL数据库中。但是,当用户执行此操作时,输入的时间“8:00 AM”将在下午3点存储在数据库中。无论时区如何,我希望它在输入时存储。我认为最好的方法是将所有内容设置为UTC并让它忽略我的时区(亚利桑那州),但Rails似乎忽略了我的设置。例如:
Time.zone = 'UTC'
mon_open_date = Time.parse(params[:venue][:mon_open_at]) rescue nil
# => 2011-04-27 08:00:00 -0700
MySQL中的结果:
+-------------+
| mon_open_at |
+-------------+
| 15:00:00 |
+-------------+
1 row in set (0.00 sec)
有什么想法吗?
答案 0 :(得分:4)
Time.parse始终将字符串解析为计算机的本地时区。您需要使用Time.zone.parse
将其解析为指定的时区UTC。
答案 1 :(得分:2)
MySQL总是uses the server's time zone setting, by default (如果你是数据库管理员,你可以改变它。)
如果您将日期/时间值存储在TIMESTAMP列中,它们将以时区无关的方式存储(转换为UTC进行存储,然后再次返回服务器的时区)使用)。
如果您将日期/时间存储在DATETIME列中,值将完全按照您输入的方式存储 - 如果您更改服务器的时区,然后从DATETIME列中选择旧值,您将看到与输入时完全相同的值。
查看DATETIME/TIMESTAMP列的文档,了解更精细的要点。