Ruby on rails 如何将时间移动(而不是转换)到新时区?

Ruby on rails 如何将时间移动(而不是转换)到新时区?,ruby-on-rails,ruby,timezone,Ruby On Rails,Ruby,Timezone,我有一个DateTimed和一个字符串tz,这是一个有效的ActiveSupport::时区键(例如“UTC”、“东部时间(美国和加拿大)”、“美国/芝加哥”等)。如何获取一个新的日期时间d2,使所有内容都相同,但d2的偏移量现在反映了与tz对应的时区的偏移量 请注意,我不想将时间转换为新时区。我想要一个新的DateTime,其他条件相同,但偏移量不同 例如,如果我有d=,和tz='中央时间(美国和加拿大),我想要的是d2=,而不是d2=,给定的tz,您可以将其转换为一天的一小部分: offse

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

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


例如,如果我有
d=
,和
tz='中央时间(美国和加拿大)
,我想要的是
d2=
,而不是
d2=
,给定的
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\u zone
来镜像
DateTime.in_time\u zone
。谢谢