2010-03-23 70 views
0

如何使用自定義時區設置我的Rails應用程序?我想設置我的應用程序時區與UTC-04:00沒有夏令時。Rails自定義TimeZone

更新:爲了澄清我的問題,我瞭解到我可以使用TimeZone constants中的一個名稱在environment.rb文件中設置時區名稱。我想我的申請時區爲UTC -04:00沒有夏令時。

感謝, 梭萌

回答

0

通常情況下你只需要做到這一點,當你住在位置不實行夏令時。在你的特定情況下,你很幸運,並可以使用「拉巴斯」時區。根據this website,它不執行DST。

您可以隨時運行瑞克時間:區域:全部並查看UTC偏移對應於您感興趣的偏移量。然後谷歌這些抵消,看看他們是否在一年中改變。

我不知道一個通​​用的方法來告訴Rails你希望UTC +/-一個固定的偏移量。

2

假設您想要一個不使用DST的時區,並且基本上始終跟蹤東部標準時間(也稱爲東部普及時間)。你希望它始終是一個-05:00的偏移量。

使用時區Etc/GMT+5。 Rails會延遲加載時區不能從TZInfo其正常的列表中,這樣你就可以採摘櫻桃從:http://tzinfo.rubyforge.org/svn/trunk/tzinfo/lib/tzinfo/definitions/Etc/

這裏有一些例子來證明這一點,在我的Rails 3.2軌控制檯:

夏令例子。 10月4日是夏令時。你會期望你的時間在東部時間和你的特殊時區之前關閉。 2011-10-05 04:57:23 UTC應該是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在美國東部時間和您的特殊時區都應該是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?我不完全確定。我預料它會是格林威治標準時間-5,但這就是TZInfo中的等時區似乎是如何工作的。