【问题标题】:How do I move (not convert) a time into a new time zone?如何将时间移动(不转换)到新时区?
【发布时间】:2011-06-07 02:29:42
【问题描述】:

我有一个 DateTime d 和一个字符串 tz 这是一个有效的 ActiveSupport::TimeZone 键(例如“UTC”、“东部时间(美国和加拿大)”、“美国/芝加哥”等) .如何获得一个新的 DateTime d2 以使一切都相同,但 d2 的偏移量现在反映了与 tz 对应的时区的偏移量?

请注意,我不想将时间转换为新时区。我想要一个新的 DateTime,其他一切都相同,但偏移量不同。

例如,如果我有d = <today @ 5:00 PM UTC>tz = 'Central Time (US & Canada)',我想要的是d2 = <today @ 5:00 PM -0600>不是 d2 = <today @ 11:00 AM -0600>

【问题讨论】:

    标签: ruby-on-rails ruby timezone


    【解决方案1】:

    鉴于tz,您可以将其转换为一天中的一小部分的偏移量:

    offset = ActiveSupport::TimeZone.new(tz).utc_offset / 60 / 60 / 24.0
    => -0.25 # for 'Central Time (US & Canada)'
    

    然后您可以将其与来自d 的现有详细信息一起传递到DateTime.civil 以创建新对象:

    d2 = DateTime.civil(d.year, d.month, d.day, d.hour, d.min, d.sec, offset)
    

    【讨论】:

    • 我真的很惊讶没有更好的方法来做到这一点,但看起来这是正确的。也许有人可以写一个DateTime.with_time_zone 来镜像DateTime.in_time_zone。谢谢!
    猜你喜欢
    • 2020-06-08
    • 2015-08-30
    • 1970-01-01
    • 2021-02-10
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2018-02-24
    相关资源
    最近更新 更多