使用 ActiveSupport::TimeWithZone 将 UTC 转换为用户定义的时区

问题描述 投票:0回答:1

作为 Rake 任务的一部分,我需要将 UTC 时间转换为用户所在时区的等效时间。我想要做的是更改午夜的 UTC 时间戳,然后将时间戳重新创建为用户所在时区的午夜。

示例

转换 UTC 时间

Wed, 01 Mar 2017 00:00:00 UTC +00:00

遵守夏令时(春季/夏季)时改为东部夏令时间 (EDT)

Wed, 01 Mar 2017 04:00:00 UTC +00:00
zone = ActiveSupport::TimeZone.new("Eastern Time (US & Canada)")
time = "Wed, 01 Mar 2017 00:00:00 UTC +00:00"
time.in_time_zone(zone)
=> Tue, 28 Feb 2017 19:00:00.000000000 EST -05:00

以上内容仍将在数据库中保存为

Wed, 01 Mar 2017 00:00:00 UTC +00:00
,因为 Rails 会将所有时间戳转换回 UTC。但是,我需要获取
Wed, 01 Mar 2017 04:00:00 UTC +00:00
,因为这是用户所在时区一天的 true 开始。

ruby-on-rails ruby timezone activesupport
1个回答
0
投票

当您想要将时间初始化为特定时区的特定时间时,您需要使用正确的 EST 或 EDT 时区标识符(

EST -05:00
EDT -04:00
)来初始化时间。

time = "Wed, 01 Mar 2017 00:00:00 EST -05:00"
time.in_time_zone('UTC')
#=> Wed, 01 Mar 2017 05:00:00.000000000 UTC +00:00

time = "Wed, 01 Mar 2017 00:00:00 EDT -04:00"
time.in_time_zone('UTC')
#=> Wed, 01 Mar 2017 04:00:00.000000000 UTC +00:00
© www.soinside.com 2019 - 2024. All rights reserved.