Rails时区和夏令时

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

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

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

我的问题是,让我们假设这个日期/时间表示我的国家从夏季退出(GMT-3)后的日期/时间。 Rails将在UTC时间下午1点00分保存? 今天,在夏令时,当地时间怎么样? 在未来,这个当地时间将如何?

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

谢谢。

你提问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 

--Kip

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

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

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