2013-10-17 82 views
1

我無法在JRuby中正確使用Ruby的Time.new語法,即使這可以在文檔中描述的其他Ruby版本中使用。我認爲,這種行爲在各個方面都有所不同,在某些方面也是不正確的。我在網上做了一些研究,看起來這不是衆所周知的。JRuby是否正確處理Time.new和時區?

在我修復此問題或將其提交給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 

我在做什麼錯?

回答

2

紅寶石有很多無證行爲。因爲所有運行時間都有一些差異。

試圖記錄所有特殊部件的一個項目是RubySpec

,你可以去這裏看看,如果你的例子是有據可查的:https://github.com/rubyspec/rubyspec/blob/master/core/time/new_spec.rb

+0

其實,我覺得這個項目是爲了記錄所有的紅寶石應遵循的規範。我發現了這個規範並且運行了這個語句:'Time.new(2000,1,1,0,0,0,「+05:30」)。utc_offset#=> -18000'並且規範聲明應該== 19800 '所以在這種情況下它會失敗。好找! – WattsInABox

+1

@WattsInABox它實際上是因爲所有的「奇怪」部分 – phoet