Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何将Time.zone设置为UTC并保持这种状态?_Mysql_Ruby On Rails_Ruby_Time - Fatal编程技术网

Mysql 如何将Time.zone设置为UTC并保持这种状态?

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

我在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]) 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列中选择旧值,您将看到与输入值完全相同的值

查看有关列的文档,了解更详细的要点