2009-11-03 46 views
4

我需要從Ruby中找出本地機器時區名稱(來自TZInfo :: Timezone.all_identifiers值列表)。我需要它,以便我可以正確設置Oracle數據庫會話時區,以便可以正確處理數據庫中時區值的時間戳。如何以與Java相同的方式從Ruby獲取本地時區名稱?

我想要獲得與使用java.util.TimeZone.getDefault()。getID()(在我的計算機上返回「Europe/Riga」)的Java相同的值。就我所看到的JDK源代碼而言,有特定於平臺的C函數可以找到這個默認時區。

所以當使用JRuby時,我可以調用這個Java方法。但是我需要一個可以用於MRI的解決方案。

我試圖使用Time.now.zone,但它返回不同的結果(在我的情況下「EET」或「EEST」),取決於當前是否夏令時。所以我真的需要得到前面提到的位置格式(比如「Europe/Riga」),它正確指定了切換到夏令時的日期。

有什麼建議嗎?

回答

2

由於兼容性原因,JRuby返回EET/CDT-like值,因爲C-Ruby的確如此。但是,因爲JRuby中可以很容易地調用Java層,你可以稱它像達:

require 'java' 
id = java.util.TimeZone.getDefault().getID() 

,或者在更多的Ruby的語法:

require 'java' 
id = java.util.TimeZone.get_default.get_id 

或者,你可以使用JodaTime:

require 'java' 
id = org.joda.time.DateTimeZone.getDefault.getID 
+2

是的,在JRuby中很簡單。但我想在MRI中得到相同的結果(原始的基於C的Ruby解釋器)。 – 2009-11-03 09:38:04

+0

我不認爲MRI沒有辦法做到這一點,沒有一些技巧或本地電話。在Linux上,很簡單,只需「cat/etc/timezone」。 – vsizikov 2009-11-03 12:59:28

相關問題