我有一个日期时间 d
和一个字符串 tz
这是有效的 ActiveSupport::TimeZone key (例如“UTC”、“东部时间(美国和加拿大)”、“美国/芝加哥”等)。我如何获得一个新的 DateTime d2 以便一切都相同,但偏移量为 d2
现在反射(reflect)对应于 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>
.
最佳答案
给定 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)
关于ruby-on-rails - 如何将时间移动(而不是转换)到新时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4656740/