gpt4 book ai didi

ruby-on-rails - 让 Rails 在显示日期时忽略夏令时

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:00 26 4
gpt4 key购买 nike

我在我的 Rails 应用程序中以 UTC 格式存储了一个日期,并试图将其显示给以 "Eastern Time (US & Canada)" 作为时区的用户。问题是 Rails 不断将其转换为东部夏令时 (EDT),因此午夜显示为 8am,而应为 7am。有没有办法阻止 DST 转换?

>> time = DateTime.parse("2013-08-26T00:00:00Z")
=> Mon, 26 Aug 2013 00:00:00 +0000
>> time.in_time_zone("Eastern Time (US & Canada)")
=> Sun, 25 Aug 2013 20:00:00 EDT -04:00

更新

我最终改变了@zeantsoi 的方法。我不太喜欢添加太多 Rails 助手,因此我扩展了主动支持的 TimeWithZone 类。

class ActiveSupport::TimeWithZone
def no_dst
if self.dst?
self - 1.hour
else
self
end
end
end

现在我可以做 time.in_time_zone("Eastern Time (US & Canada)").no_dst

最佳答案

创建一个利用 dst? 的助手TimeZone 上的方法检查传递的时区当前是否在 DST 中。如果是,则从提供的 DateTime 实例中减去一个小时:

# helper function
module TimeConversion
def no_dst(datetime, timezone)
Time.zone = timezone

if Time.zone.now.dst?
return datetime - 1.hour
end

return datetime
end
end

然后,在您的 View 中呈现调整后(或未调整后)的时间:

# in your view
<%= no_dst(DateTime.parse("2013-08-26T00:00:00Z"), 'Eastern Time (US & Canada)') %>
#=> Sun, 25 Aug 2013 19:00:00 EDT -04:00

关于ruby-on-rails - 让 Rails 在显示日期时忽略夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com