Mysql 如何将Time.zone设置为UTC并保持这种状态?
我在Ruby 1.9.2上有一个Rails 3应用程序,用户在其中输入工作时间,并将其存储在MySQL数据库中。但是,当用户执行此操作时,输入的时间“8:00AM”将作为下午3点存储在数据库中。我希望在他们输入时将其存储,而不考虑时区。我认为最好的方法是将所有设置都设置为UTC,并让它忽略我的时区(亚利桑那州),但Rails似乎忽略了我的设置。例如:Mysql 如何将Time.zone设置为UTC并保持这种状态?,mysql,ruby-on-rails,ruby,time,Mysql,Ruby On Rails,Ruby,Time,我在Ruby 1.9.2上有一个Rails 3应用程序,用户在其中输入工作时间,并将其存储在MySQL数据库中。但是,当用户执行此操作时,输入的时间“8:00AM”将作为下午3点存储在数据库中。我希望在他们输入时将其存储,而不考虑时区。我认为最好的方法是将所有设置都设置为UTC,并让它忽略我的时区(亚利桑那州),但Rails似乎忽略了我的设置。例如: Time.zone = 'UTC' mon_open_date = Time.parse(params[:venue][:mon_open_at
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)
有什么想法吗?Time.parse总是将字符串解析为计算机的本地时区。您需要使用
Time.zone.parse
将其解析为指定的时区UTC。Time.parse始终将字符串解析为计算机的本地时区。您需要使用Time.zone.parse
将其解析为指定的时区UTC。MySQL始终(但如果您是数据库管理员,您可以更改此设置)
如果将日期/时间值存储在时间戳列中,它们将以时区无关的方式存储(转换为UTC存储,然后再次返回服务器的时区使用)
如果将日期/时间存储在DATETIME列中,值的存储方式与您输入的完全相同-如果更改服务器的时区,然后从DATETIME列中选择旧值,您将看到与输入值完全相同的值
请查看有关列的文档以了解更详细的要点。MySQL始终(如果您是数据库管理员,您可以更改这一点)
如果将日期/时间值存储在时间戳列中,它们将以时区无关的方式存储(转换为UTC存储,然后再次返回服务器的时区使用)
如果将日期/时间存储在DATETIME列中,值的存储方式与您输入的完全相同-如果更改服务器的时区,然后从DATETIME列中选择旧值,您将看到与输入值完全相同的值
查看有关列的文档,了解更详细的要点