【发布时间】:2010-03-23 19:27:21
【问题描述】:
如何使用自定义时区设置我的 Rails 应用程序?我想使用 UTC-04:00 设置我的应用程序时区,而不使用夏令时。
更新:为了澄清我的问题,我知道我可以在 environment.rb 文件中使用 TimeZone constants 中的名称之一设置时区名称。我希望我的应用程序时区为 UTC -04:00 而没有夏令时。
谢谢, 苏萌
【问题讨论】:
如何使用自定义时区设置我的 Rails 应用程序?我想使用 UTC-04:00 设置我的应用程序时区,而不使用夏令时。
更新:为了澄清我的问题,我知道我可以在 environment.rb 文件中使用 TimeZone constants 中的名称之一设置时区名称。我希望我的应用程序时区为 UTC -04:00 而没有夏令时。
谢谢, 苏萌
【问题讨论】:
假设您想要一个不使用 DST 的时区,并且基本上始终跟踪东部标准时间(也称为东部流行时间)。您希望它始终是 -05:00 偏移量。
使用时区Etc/GMT+5。 Rails 将从 TZInfo 延迟加载不在其正常列表中的时区,因此您可以从中挑选:http://tzinfo.rubyforge.org/svn/trunk/tzinfo/lib/tzinfo/definitions/Etc/
在我的 Rails 3.2 rails 控制台中,有一些例子可以证明这一点:
夏令时示例。 10 月 4 日是夏令时。您会希望东部时间和您的特殊时区的时间减少一。 UTC 中的 2011-10-05 04:57:23 应为东部夏令时间 2011-10-05 00:57:23。
1.9.3p0 :014 > DateTime.civil(2011,10,5,4,57,23)
=> Wed, 05 Oct 2011 04:57:23 +0000
1.9.3p0 :015 > DateTime.civil(2011,10,5,4,57,23).in_time_zone('Eastern Time (US & Canada)')
=> Wed, 05 Oct 2011 00:57:23 EDT -04:00
1.9.3p0 :016 > DateTime.civil(2011,10,5,4,57,23).in_time_zone('Etc/GMT+5')
=> Tue, 04 Oct 2011 23:57:23 GMT+5 -05:00
非夏令时示例。 12 月 1 日是标准时间。您会期望东部时间和您的自定义“总是 EST”是等效的。 2011-12-01 02:30:45 在 EST 和您的特殊时区中应该是 2011-11-30 21:30:45。
1.9.3p0 :010 > DateTime.civil(2011,12,1,2,30,45)
=> Thu, 01 Dec 2011 02:30:45 +0000
1.9.3p0 :012 > DateTime.civil(2011,12,1,2,30,45).in_time_zone('Eastern Time (US & Canada)')
=> Wed, 30 Nov 2011 21:30:45 EST -05:00
1.9.3p0 :013 > DateTime.civil(2011,12,1,2,30,45).in_time_zone('Etc/GMT+5')
=> Wed, 30 Nov 2011 21:30:45 GMT+5 -05:00
为什么是GMT+5 而不是GMT-5?我不完全确定。我原以为它是 GMT-5,但这就是等时区在 TZInfo 中的工作方式。
【讨论】:
通常,您只希望在您居住的地点不实行夏令时时执行此操作。在您的特定情况下,您很幸运,可以使用“拉巴斯”时区。根据this website,它不实行夏令时。
您始终可以运行 rake time:zones:all 并查看哪些 UTC 偏移量对应于您有兴趣使用的偏移量。然后用谷歌搜索这些偏移量,看看它们在一年中是否发生变化。
我不知道告诉 Rails 你想要 UTC +/- 一个固定偏移量的一般方法。
【讨论】: