我的任务是将多个数据导入rails应用程序。旧数据库中的所有数据都存储在此日期的实际德国时间的时间戳。我想现在以UTC格式保存。
示例,在数据库德国日期存储为:
在UTC中是正确的,应该在我的Rails数据库中:
因为6月1日德国的CEST是UTC + 2,11月1日是德国的CET + UTC + 1.
没有我的问题:我知道如何告诉Ruby时区,但夏令时呢?
Time.parse ’#{timestamp} CEST’
会导致
Time.parse'2013-06-01 10:44:00 CEST'
这将是正确的,并正确地将时间保存为我的数据库中的08:44 UTC
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}德国可能的东西?
否则我需要检查 - >如果在3月30日到10月26日之间使用CEST,那么CET - 这对我来说似乎很复杂......
任何有用的帮助。
答案 0 :(得分:2)
区域是否具有DST在时区中进行编码。
确保设置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内。