Rails时区和夏令时

Bee*_*ice 15 ruby-on-rails ruby-on-rails-3

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

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

当我恢复该记录时,我不得不转换为当地时间来显示.好?

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

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

谢谢.

Tom*_*son 14

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

关键是要确保所有日期都以UTC时区存储,然后以当地时区显示.听起来你正在这样做.

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


Kip*_*Kip 3

7 个月后你问,但也许skip_time_zone_conversion_for_attributes=会有所帮助 - 它告诉 AcitveRecord 不要在存储或检索时转换时区。请参阅ActiveRecord Timestamp,其中显示了示例:

class Topic < ActiveRecord::Base
  self.skip_time_zone_conversion_for_attributes = [:written_on]
end
Run Code Online (Sandbox Code Playgroud)