2010-09-13 16 views
1

“2010--9-12 3:12 pm”是慢性Rubygem的弱点,这似乎很奇怪?有没有办法让它工作? (或其他的宝石,能做到吗?)我也希望能找到一个分析器,可以处理2010-09-12 3:12pm UTC或其他时区,如PDT,,或UTC+8-0700Rubygems慢性不能解析“2010-09-12 3:12 pm”,但可以解析“2010-09-12 3pm”或“最后一个星期一下午3:12”?

irb(main):001:0> RUBY_VERSION 
=> "1.8.7" 

irb(main):002:0> require 'rubygems' 
=> true 
irb(main):003:0> require 'chronic' 
=> true 

irb(main):004:0> Chronic.parse('9/12/2010') 
=> Sun Sep 12 12:00:00 -0700 2010 

irb(main):005:0> Chronic.parse('9/12/2010 3pm') 
=> Sun Sep 12 15:00:00 -0700 2010 

irb(main):006:0> Chronic.parse('9/12/2010 3:12pm') # <-- cannot work 
=> nil 

irb(main):007:0> Chronic.parse('last monday 3:12pm') 
=> Mon Sep 06 15:12:00 -0700 2010 

irb(main):008:0> Chronic.parse('2010-09-12') 
=> Sun Sep 12 12:00:00 -0700 2010 

irb(main):009:0> Chronic.parse('2010-09-12 3:12pm') # <-- cannot work 
=> nil 

回答

1

它采用最新的Chronic对我的作品上Github关于Ruby 1.8.7(2009-06-12 PATCHLEVEL 174):

>> RUBY_VERSION 
=> "1.8.7" 

>> require './chronic/lib/chronic' 
=> true 

>> Chronic.parse('9/12/2010 3:12pm') 
=> Sun Sep 12 15:12:00 +0100 2010 

>> Chronic.parse('2010-09-12 3:12pm') 
=> Sun Sep 12 15:12:00 +0100 2010 

在测试套件存在用于测试:

time = parse_now("2006-08-20 7pm") 
assert_equal Time.local(2006, 8, 20, 19), time 

time = parse_now("2006-08-20 03:00") 
assert_equal Time.local(2006, 8, 20, 3), time 

但与您的问题日期不完全匹配。所以如果你发现了一个bug,那么可能值得告诉Chronic的作者,以便他可以更新测试。

BTW ......你当你尝试,你会得到什么:

require 'time' 

puts Time.parse('2010-09-12 3:12pm') 

因为我得到正确的:Sun Sep 12 15:12:00 +0100 2010(NB我在日光节约时间在这里)。我提到这一点是因为我今天早上看到一个模糊的推文,关于问题time API in a minor point release

/I3az/

+0

,因为需要使用以下格式我不能使用Time.parse:(它将该12个月)'Time.parse('09 /2010分之123点12分PDT“)' => '2010-12-09 14:12:00 -0800' – 2010-09-13 10:13:15

+0

当我做'Time.parse('09/12/2010 3:12 pm PDT')'我得到'Sun Sep 12 23:12:00 +0100 2010'这是正确转换时间到我的区域设置(GMT + 1)。不过,我有点惊讶,它会在我的区域中显示MM/DD而不是DD/MM! – draegtun 2010-09-13 12:01:03