如何以与Java相同的方式从Ruby获取本地时区名称?

时间:2009-11-03 09:15:26

标签: java ruby timezone

我需要从Ruby中找到本地机器时区名称(来自TZInfo :: Timezone.all_identifiers值列表)。我需要它,以便我可以正确设置Oracle数据库会话时区,以便我可以正确处理数据库中时区值的时间戳。

我希望获得与Java相同的值,您可以使用java.util.TimeZone.getDefault()。getID()(在我的计算机上返回“Europe / Riga”)。至于我看过JDK源代码,有特定于平台的C函数可以找到这个默认时区。

因此,当使用JRuby时,我可以调用这个Java方法。但是我需要一种可以用于MRI的解决方案。

我尝试使用Time.now.zone,但它会返回不同的结果(在我的情况下为“EET”或“EEST”),具体取决于当前是否为夏令时。所以我真的需要进入前面提到的位置格式(如“Europe / Riga”),它正确指定切换到夏令时的日期。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

JRuby出于兼容性原因返回类似EET / CDT的值,因为C-Ruby也是如此。但是,由于JRuby可以轻松地调用Java层,因此您可以将其称为tat:

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