Rails时区和夏令时

时间:2012-11-14 11:54:03

标签: ruby-on-rails ruby-on-rails-3

有一段时间我试图了解这个时区时间是如何工作的,我有一个问题:

今天在我的国家,我们处于夏令时(GMT-2)。 因此,我的应用程序的用户输入时间,如上午11:00并发布表单。 据我所知,rails会将此日期转换为UTC并保存在数据库中(在我的情况下为mysql),如:01:00 PM UTC。

当我恢复该记录时,我必须转换为当地时间才能显示。 OK?

我的问题是,让我们假设这个日期/时间表示我的国家从夏季退出(GMT-3)后的日期/时间。 Rails将节省时间01:00 PM?今天,在夏令时,当地时间怎么样?在未来,这个当地时间将如何?

基本上,我总是需要在11:00 AM向用户显示。

感谢。

2 个答案:

答案 0 :(得分:14)

有几个时区可以发挥作用:操作系统(或可能是用户帐户)默认设置,数据库服务器,Rails environment.rb

关键是确保所有日期存储与UTC时区,然后显示在您当地的时区。这听起来像你在做那件事。

所以你的问题似乎归结为“如果它是白天时间,我想要抵消-3小时,否则抵消-2小时”。通过Rails时间扩展,您可以确定当前偏移量,如Time.zone.now.utc_offsetTime#dst?告诉您,如果是夏令时,那么您可以有条件地减去额外的小时(3600秒)。

答案 1 :(得分:3)

你提问7个月后,但也许skip_time_zone_conversion_for_attributes =会有所帮助 - 它告诉AR不要在存储或检索时转换时区。请参阅[ActiveRecord Timestamp](http://api.rubyonrails.org/classes/ActiveRecord/Timestamp.html),其中显示了示例:

class Topic < ActiveRecord::Base
  self.skip_time_zone_conversion_for_attributes = [:written_on]
end

- 硖