【问题标题】:DateTime set TimeZone日期时间设置时区
【发布时间】:2015-06-05 11:22:37
【问题描述】:

ubuntu 14.04
红宝石 1.9.3-p484
轨道 3.2.18

我有一个日期作为字符串:06/20/2015 02:45 AM

d = DateTime.strptime('06/20/2015 02:45 AM', '%m/%d/%Y %I:%M %p').to_time
=> Sat, 20 Jun 2015 02:45:00 UTC

当前时区可能不同,放在Time.zone

我试过d.to_time.in_time_zone。它分别给出了 PDT 和 CDT 时区:

Fri, 19 Jun 2015 21:45:00 CDT -05:00
Fri, 19 Jun 2015 19:45:00 PDT -07:00

我需要获取 DateTime 对象,该对象包含日期 Sat, 20 Jun 2015 02:45:00 PDT -07:00 用于 PDT 区域或 Sat, 20 Jun 2015 02:45:00 CDT -05:00 用于 CDT 区域。

【问题讨论】:

  • 当我运行你的 DateTime 代码时,我没有在 UTC 中恢复它:2015-06-19 22:45:00 -0400 -- 愿意分享 ruby​​ 和 rails 的版本吗?

标签: ruby ruby-on-rails-3 date time


【解决方案1】:

我认为它会起作用:

zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
d.to_time.in_time_zone.in_time_zone(zone)

或者只是

d.to_time.in_time_zone.in_time_zone("Central Time (US & Canada)")

【讨论】:

  • 不,它不起作用。 d.to_time.in_time_zone.in_time_zone("太平洋时间(美国和加拿大)") => 2015 年 6 月 19 日星期五 19:45:00 PDT -07:00
  • 第一个也没有?
【解决方案2】:

试试这个:

#config/application.rb
 config.time_zone = 'Central Time (US & Canada)' 
 config.active_record.default_timezone = :local

别忘了重启你的服务器。

【讨论】:

    【解决方案3】:

    我找到了解决方案。方法DateTime#offset规则:

    d = DateTime.strptime('06/20/2015 02:45 AM', '%m/%d/%Y %I:%M %p')
    d = d.change(offset: (Time.zone.now.utc_offset / 3600).to_s)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-12
      • 2017-10-10
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2014-11-10
      相关资源
      最近更新 更多