【问题标题】:Rubygems Chronic cannot parse "2010-09-12 3:12pm" but can parse "2010-09-12 3pm" or "last monday 3:12pm"?Rubygems Chronic 无法解析“2010-09-12 3:12pm”但可以解析“2010-09-12 3pm”或“last monday 3:12pm”?
【发布时间】:2010-09-13 07:16:15
【问题描述】:

“2010--9-12 3:12pm”是Chronic Rubygem 的弱点,这似乎很奇怪?有没有办法让它工作? (或其他可以做到的gem?)我也希望找到一个可以处理2010-09-12 3:12pm UTC或其他时区如PDTPSTUTC+8-0700的解析器

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

【问题讨论】:

    标签: ruby rubygems chronic


    【解决方案1】:

    它适用于我在 Ruby 1.8.7(2009-06-12 补丁级别 174)上的 Github 上使用最新的 Chronic

    >> 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
    

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

    顺便说一句...当你尝试时你会得到什么:

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

    因为我得到了正确的:Sun Sep 12 15:12:00 +0100 2010(注意。我在这里是夏令时)。我之所以提到这一点,是因为我今天早上看到了一条关于 problem 的模棱两可的推文,time API in a minor point release

    /I3az/

    【讨论】:

    • 我不能使用 Time.parse 因为需要以下格式:(它将 12 视为月份)Time.parse('09/12/2010 3:12pm PDT') => 2010-12-09 14:12:00 -0800
    • 当我执行Time.parse('09/12/2010 3:12pm PDT') 时,我得到Sun Sep 12 23:12:00 +0100 2010,它已正确转换为我的语言环境 (GMT+1) 的时间。但是我有点惊讶它在我的语言环境中是 MM/DD 而不是 DD/MM!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2011-08-16
    相关资源
    最近更新 更多