【问题标题】:How do I set Time.zone to UTC and keep it that way?如何将 Time.zone 设置为 UTC 并保持这种状态?
【发布时间】:2011-08-13 18:14:24
【问题描述】:

我有一个基于 Ruby 1.9.2 的 Rails 3 应用程序,用户可以在其中输入营业时间并将其存储在 MySQL 数据库中。但是,当用户执行此操作时,输入的时间“上午 8:00”将作为下午 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)

有什么想法吗?

【问题讨论】:

    标签: mysql ruby-on-rails ruby time


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      MySQL 始终为uses the server's time zone setting, by default(但如果您是数据库管理员,您可以更改它)。

      如果您将日期/时间值存储在 TIMESTAMP 列中,它们以与时区无关的方式存储(转换为 UTC 进行存储,然后再次返回服务器的时区用法)。

      如果您将日期/时间存储在 DATETIME 列中,值将完全按照您输入的方式存储 - 如果您更改服务器的时区,然后从 DATETIME 列中选择旧值,您将看到与输入时完全相同的值。

      查看DATETIME/TIMESTAMP 列上的文档以了解更详细的信息。

      【讨论】:

        猜你喜欢
        • 2012-08-06
        • 2023-02-26
        • 2021-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-12
        • 2016-12-16
        • 1970-01-01
        相关资源
        最近更新 更多