2011-04-27 81 views
1

我在Ruby 1.9.2上有一个Rails 3应用程序,用户输入营业时间并将它们存储在MySQL数据库中。但是,当用户执行此操作时,输入的时间“8:00 AM”会在数据库中以3pm的形式存储。无论时区如何,我都希望它在输入时进行存储。我认为最好的办法是将所有东西都设置为UTC,并让它忽略我的时区(亚利桑那州),但Rails似乎忽略了我的设置。例如:如何将Time.zone设置为UTC并保持这种状态?

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) 

任何想法?

回答

4

Time.parse总是将字符串分析到您计算机的本地时区。您需要使用Time.zone.parse才能将其解析为指定的时区UTC。

+0

这样做的窍门,谢谢! – huertanix 2011-04-27 12:09:31

2

MySQL总是uses the server's time zone setting, by default(虽然你可以改变,如果你是数据库管理员)。

如果您存储timestamp列中的日期/时间值,它们被存储在一个时区无关的方式(转换为UTC存储,然后返回到服务器的时区再次使用)。

如果您存储日期/在DATETIME列次,的值,当你进入他们存储的确切 - 如果你改变了服务器的时区,然后选择旧值了DATETIME列,你会看到与您输入时完全相同的值。

查看关于DATETIME/TIMESTAMP列的文档,获取更精确的点数。