如何以与java相同的方式从ruby中获取本地时区名称?

0pizxfdo  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(321)

我需要从ruby(从tzinfo::timezone.all\u标识符值列表)中找出本地机器时区名称。我需要它,这样我就可以正确地设置oracle数据库会话时区,这样我就可以用数据库中的时区值正确地处理时间戳。
我想得到与java中java.util.timezone.getdefault().getid()相同的值(在我的计算机上返回“europe/riga”)。据我所知,jdk源代码中有一些特定于平台的c函数,可以找到这个默认时区。
所以在使用jruby时,我可以调用这个java方法。但我需要一个能和核磁共振一起使用的解决方案。
我尝试使用time.now.zone,但它返回不同的结果(在我的例子中是“eet”或“eest”),这取决于当前是否是夏令时。所以我真的需要使用前面提到的位置格式(比如“europe/riga”),它正确地指定了切换到夏令时的日期。
有什么建议吗?

2skhul33

2skhul331#

由于兼容性的原因,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

相关问题