2011-11-02 217 views
3

我有一箇舊的數據庫時區的格式,如:紅寶石:轉換「美國/東方」時區名稱爲「中部時間(美國和加拿大)」

US/Eastern 
Australia/Melbourne 

在我的新的Rails應用程序,我將它們保存爲:

Eastern Time (US & Canada) 
Melbourne 

如何將舊的轉換爲新的?我一直在搞ActiveSupport :: TimeZone,但無法弄清楚從一個到另一個的正確組合。

我希望我能創建一個新的對象,然後返回新格式化的名稱,但它只是返回我給它的名稱。例如:

> tz = ActiveSupport::TimeZone.new("US/Eastern") 
=> (GMT-05:00) US/Eastern 
> tz.name 
=> "US/Eastern" 

在此先感謝!

回答

4

這是很醜陋,但它是我發現這樣做的唯一方法:對於這個代碼與城市或區域,你可以工作

city = TZInfo::Timezone.get('US/Eastern').instance_eval('@linked_timezone').name 
ActiveSupport::TimeZone::MAPPING.invert[city] 

編輯這樣做:

zone = TZInfo::Timezone.get(zone_name) 
city = (zone.instance_eval('@linked_timezone') || zone).name 
ActiveSupport::TimeZone::MAPPING.invert[city] 
+0

對於墨爾本的例子,不要擊中@ linked_timezone變量,因爲沒有一個(你已經有一個城市)。 (我更新了上面的代碼。) –

相關問題