2017-03-01 62 views
0

为什么Time.zone.parse('invalid')引发错误,而Time.parse('invalid')呢?期待Time.zone.parse引发无效日期的错误,但返回零


实施例使用Rails 4.2.7.1

>> Time.zone.parse('invalid') 
nil 

>> Time.parse('invalid') 
ArgumentError: no time information in "invalid" 
    from D:/softwares/ruby/Ruby22/lib/ruby/2.2.0/time.rb:252:in `make_time' 
    from D:/softwares/ruby/Ruby22/lib/ruby/2.2.0/time.rb:364:in `parse' 
+0

看看方法的实际源代码,你会明白:) [link1](https://ruby-doc.org/core-2.2.2/Time.html#method-i-zone)和[link2](https://ruby-doc.org/stdlib-2.1.1/libdoc/time/rdoc/Time.html#method-c-parse) –

+0

谢谢,我理解这种行为。但我不明白*为什么他们选择这样做。 – seza443

回答

0

这两种方法都调用Date._parse其返回{}如果没有日期可以提取。

Time.zone.parse在那里停止并在结果为空时返回。 Time.parse打电话给make_time,如果不能生成日期,则会引发错误。