我的Rails应用程序中有一个以UTC格式存储的日期,并且我正在尝试将其显示给以"Eastern Time (US & Canada)"
为时区的用户。问题是导轨不断将其转换为东部夏令时(EDT),因此午夜显示为早上8点时应该早上7点。反正有没有阻止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
答案 0 :(得分:1)
创建一个帮助器,利用TimeZone
上的dst?
方法检查传递的时区当前是否在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
然后,在视图中渲染调整后的(或未调整的)时间:
# 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