我在Ruby的Date.parse中发现了一个奇怪的行为,想知道是否有人可以阐明。
今天的日期是2011年10月17日。
irb(main):027:0> Date.parse("11-20").to_s
=> "2011-10-11"
irb(main):028:0> Date.parse("11/20").to_s
=> "2011-11-20"
irb(main):029:0> Date.parse("1-20").to_s
=> "2011-10-20"
irb(main):032:0> Date.parse("1/20").to_s
=> "2011-01-20"
irb(main):030:0> Date.parse("9-20").to_s
=> "2011-10-20"
irb(main):035:0> Date.parse("9/20").to_s
=> "2011-09-20"
irb(main):031:0> Date.parse("9-10").to_s
=> "2011-10-10"
irb(main):033:0> Date.parse("9/10").to_s
=> "2011-09-10"
irb(main):042:0> Date.parse("1-20-1997").to_s
ArgumentError: invalid date
from /usr/lib/ruby/1.8/date.rb:956:in `new_by_frags'
from /usr/lib/ruby/1.8/date.rb:1000:in `parse'
from (irb):42
from /usr/lib/ruby/1.8/date.rb:1578
irb(main):043:0> Date.parse("1/20/1997").to_s
=> "1997-01-20"
我不确定它是如何解释连字符和斜线的。斜线行为对我来说非常有意义。但连字符行为很奇怪。在连字符案例中做什么解析?
答案 0 :(得分:3)
Date.parse
在内部使用名为_parse
的方法,您可以在此处看到:
http://www.ruby-doc.org/stdlib-1.9.2/libdoc/date/rdoc/Date.html#method-c-_parse
如果你把年份放在前面,你的最后一个例子是有效的:
Date.parse("1997-1-20") #=> "1997-01-20"
如果您查看Date.parse
的默认参数str='-4712-01-01'
,这是有意义的。没有一年的连字符形式很奇怪,我个人不会使用它。
答案 1 :(得分:1)
您可能希望使用chronic gem。