【问题标题】:Convert DateTime String to UTC in rails在 Rails 中将 DateTime 字符串转换为 UTC
【发布时间】:2010-10-28 19:02:23
【问题描述】:

我有一个这样的字符串:

"2010-01-01 12:30:00"

我需要将其从当前本地时区转换为 UTC。

我试过了,但似乎认为字符串已经是UTC。

"2010-01-01 12:30:00".to_datetime.in_time_zone("Central Time (US & Canada)")
=> Fri, 01 Jan 2010 06:30:00 CST -06:00

我不知道从这里去哪里。

从我的评论中添加了这个:

>> Time.zone = "Pacific Time (US & Canada)"
=> "Pacific Time (US & Canada)"
>> Time.parse("2010-10-27 00:00:00").getutc
=> Wed Oct 27 06:00:00 UTC 2010
>> Time.zone = "Mountain Time (US & Canada)"
=> "Mountain Time (US & Canada)"
>> Time.parse("2010-10-27 00:00:00").getutc
=> Wed Oct 27 06:00:00 UTC 2010

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:
    Time.parse("2010-01-01 12:30:00").getutc
    

    编辑

    (在考虑 Ruby/Rails 日期/时间处理的噩梦时咬牙切齿)

    好的,这个怎么样:

    Time.zone.parse("2010-01-01 12:30:00").utc
    

    请注意,Time.zone.parse 返回一个 DateTime,而附加 .utc 会给您一个 Time。有区别,所以要小心。

    另外,Time.zone 是 Rails (ActiveSupport) 的一部分,而不是 Ruby。让你知道。

    【讨论】:

    • 也许我说得太早了。它不会根据 config.time_zone 更改时间。我将在上面添加一些代码以供参考。
    • 查看我的编辑。 (为 SO 添加了额外的字符以允许发布此评论。等等等等我是海象等等)
    • 这一定是我很久以来读过的最好的评论。一开始它把我弄糊涂了,但现在我明白了。谢谢你的回答,这工作。我开始感受到对 Rails 日期/时间的喜爱......
    • 第一个版本不使用zone怎么回事,我完全糊涂了?
    • 第一个版本有效,但仅适用于当前时区(由操作系统定义)。 OP 希望让每个请求处于不同的时区,为此我们必须使用 Rails TimeWithZone 库,该库混合到 Ruby 的 Time 库中。调用Time.zone 将操作的时区设置为通过设置Time.zone = "some zone" 指定的时区。 Time.zone.parse 在“某个区域”中构建一个 DateTime 对象。 utc 将结果转换为 UTC 时区。这允许传入的 Web 请求指定本地时间,但将其作为 UTC 存储在数据库中。
    【解决方案2】:

    Rails 4 及更高版本中,您可以直接使用in_time_zone

    "2010-01-01 12:30:00".in_time_zone
    #=> Fri, 01 Jan 2010 12:30:00 EST -05:00
    
    "2010-01-01 12:30:00".in_time_zone.utc
    #=> 2010-01-01 17:30:00 UTC
    

    【讨论】:

    • 不会在问题的上下文中添加更多内容,但这也是可能的timestamp.in_time_zone('UTC'),然后是timestamp.in_time_zone('Europe/Athens')
    【解决方案3】:

    对于您可以使用的 API:

    utc_date = Time.parse("2013-05-31 00:00").utc.iso8601 #=> Result will be: 2013-05-30T21:00:00Z
    

    您可以查看这些文章:

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2018-05-11
      • 2018-10-12
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      相关资源
      最近更新 更多