在显示日期时,使Rails忽略夏令时

我在我的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

创建一个利用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 

然后,在视图中渲染调整后的(或未调整的)时间:

 # 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