17

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

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

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

我的问题是,假设这个日期/时间代表未来的日期/时间,当我的国家从夏令时 (GMT-3) 出来时。Rails 会保存 01:00PM UTC?今天,在夏令时,当地时间将如何?而在未来,这个当地时间会是怎样的呢?

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

谢谢。

4

2 回答 2

14

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

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

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

于 2012-11-14T14:18:30.460 回答
3

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

class Topic < ActiveRecord::Base
  self.skip_time_zone_conversion_for_attributes = [:written_on]
end
于 2013-07-07T12:04:54.330 回答