【问题标题】:Does JRuby Handle Time.new and Timezones Properly?JRuby 是否正确处理 Time.new 和 Timezones?
【发布时间】:2013-10-26 04:55:54
【问题描述】:

我无法在 JRuby 中正确使用 Ruby 的 Time.new 语法,即使这适用于文档中描述的其他 Ruby 版本。这种行为在各个方面都是不同的,在某些方面,我认为是不正确的。我在网上做了一些研究,这似乎并不为人所知。

在解决这个问题或提交给 JRuby 小组的麻烦之前,我想确保我不是愚蠢的。因此,为了进行比较,我将使用一个非常不同的行为的基本示例。

在 JRuby 中:

jruby-1.6.8 :007 > JRUBY_VERSION
 => "1.6.8"
jruby-1.6.8 :008 > RUBY_VERSION
 => "1.9.2"
jruby-1.6.8 :009 > Time.new(2012, 10, 11, 0, 0, 0, '+09:00')
 => 2012-10-11 00:00:00 -0400
jruby-1.6.8 :010 > Time.new(2012, 10, 11, 0, 0, 0, '+9:00')
 => 2012-10-11 00:00:00 -0400

在 Ruby 中:

1.9.2p320 :002 > RUBY_VERSION
 => "1.9.2"
1.9.2p320 :003 > Time.new(2012, 10, 11, 0, 0, 0, '+09:00')
 => 2012-10-11 00:00:00 +0900
1.9.2p320 :004 > Time.new(2012, 10, 11, 0, 0, 0, '+9:00')
 ArgumentError: "+HH:MM" or "-HH:MM" expected for utc_offset

我做错了什么?

【问题讨论】:

    标签: ruby time jruby


    【解决方案1】:

    ruby 有很多未记录的行为。因此,所有运行时之间存在一些差异。

    一个试图记录所有特殊部分的项目是RubySpec

    你可以去这里看看你的例子是否有据可查:https://github.com/rubyspec/rubyspec/blob/master/core/time/new_spec.rb

    【讨论】:

    • 实际上,我认为该项目旨在记录所有红宝石应遵循的规范。我找到了规范并运行了这个语句:Time.new(2000, 1, 1, 0, 0, 0, "+05:30").utc_offset # => -18000,规范说should == 19800,所以在这种情况下它会失败。很好的发现!
    • @WattsInABox 它实际上是因为所有“奇怪的”部分而开始的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多