【问题标题】:Rails: import timestamps, different time zones and daylight saving timeRails:导入时间戳、不同时区和夏令时
【发布时间】:2014-05-21 10:23:29
【问题描述】:

我的任务是将多个数据导入到 rails 应用程序。旧数据库中的所有数据都以该日期的实际德国时间的时间戳存储。我想现在保存为 UTC。

例如,在德国数据库中,日期存储为:

  1. 2013-06-01 10:44:00
  2. 2013-11-01 10:44:00

在 UTC 中是正确的,并且应该在我的 Rails 数据库中为:

  1. 2013-06-01 08:44:00
  2. 2013-11-01 09:44:00

因为 6 月 1 日是德国的 CEST,即 UTC+2,所以 11 月 1 日是德国的 CET,即 UTC+1。

不是我的问题:我知道如何告诉 Ruby 时区,但是夏令时呢?

Time.parse ’#{timestamp} CEST’ 

会导致

  1. Time.parse '2013-06-01 10:44:00 CEST'
    在我的数据库中正确并正确地将时间保存为 08:44 UTC

  2. Time.parse '2013-11-01 10:44:00 CEST'
    也会将此保存为 08:44 UTC - 这是错误的,应该是 09:44 ...

这是可以理解的,因为我告诉 Ruby,11 月 1 日的日期是 CEST,这当然是错误的,它的 CET。 (使用 Time.parse '... CET' 也会导致错误)。

如何告诉 Ruby 根据夏令时自动确定使用哪个时区?

类似 Time.parse '#{timestamp} GERMANY' 的可能吗?

否则我需要检查 -> 如果在 3 月 30 日至 10 月 26 日之间使用 CEST,否则使用 CET - 这对我来说似乎很复杂......

非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    地区是否有夏令时以时区编码。

    确保您设置了Time.zone,然后使用Rails 的Time.zone.parse 对其进行解析。这是您可以在 Rails 控制台中尝试的示例:

    > Time.zone = 'Berlin'
    => "Berlin"
    > Time.zone.parse('2014-05-21 08:09:10')
    => Wed, 21 May 2014 08:09:10 CEST +02:00
    > Time.zone.parse('2014-11-21 08:09:10')
    => Fri, 21 Nov 2014 08:09:10 CET +01:00
    

    您可以看到相同的时间被解析为不同的偏移量,具体取决于它是否在 DST 内。

    【讨论】:

    • 这真是令人难以置信的快速、简单和正确 - 并且正在运行!非常感谢!
    猜你喜欢
    • 2018-03-04
    • 1970-01-01
    • 2015-07-31
    • 2011-10-22
    • 1970-01-01
    • 2012-04-07
    • 2013-01-31
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多