我在Rails 3中将UTC TimeTimeWithZone转换为本地时间时遇到问题。

moment是UTC中的一些Time变量(例如moment = Time.now.utc)。如何在照顾DST的情况下(即使用EST / EDT)将moment转换为我的时区?

更准确地说,如果时间与美国东部时间今天上午9点相对应,我想打印“3月14日星期一,上午9点”,如果时间与上周一美国东部时间上午9点相对应,请打印“3月7日,星期一上午9点​​”。

希望有另一种方式?

编辑:I first thought“EDT”应该是公认的时区,但“EDT”不是实际的时区,更像是时区的状态。例如,要求Time.utc(2011,1,1).in_time_zone("EDT")没有任何意义。这有点令人困惑,因为“EST” 是实际时区,在一些不使用夏令时且使用(UTC-5)的地方使用。

最佳答案

Rails有其自己的名称。看到他们与:

rake time:zones:us

您还可以在所有时区运行rake time:zones:all
要查看更多与区域相关的 rake 任务:rake -D time
因此,要转换为EST,自动适应DST:
Time.now.in_time_zone("Eastern Time (US & Canada)")

10-08 20:17
查看更多