【问题标题】:Chronic parsing of month/day月/日的慢性解析
【发布时间】:2011-08-05 18:17:26
【问题描述】:

我正在使用 Chronic 来解析日期,它会将字符串“8/15”解析为 2015 年 8 月 16 日。

关于如何让 Chronic 将 8/15 识别为当年 8 月 15 日的任何想法?

这里是测试代码:

Chronic.parse('8/15') #=> 'Sun Aug 16 12:00:00 -0400 2015'

【问题讨论】:

  • 它看起来不像文档中指定的那样,但是我会尝试传递:context => :past,看看是否有助于解析字符串。 parse 方法的文档位于此处chronic.rubyforge.org/classes/Chronic.html#M000001
  • 不,我试过了。没用:(
  • 好吧,您有几个选项可以解决这个问题。您可以修改获取数据的格式。您可以尝试通过附加年份来自己更正此数据,但这仅在数据始终采用此格式时才有效。或者你可以尝试寻找另一个库来解析日期。
  • 我无法修改格式,因为格式是用户输入的。我可以使用正则表达式来捕捉这个用例并添加年份,但这似乎很恶心。我可能需要查看其他库。
  • 啊!看看 Ruby 中的 DateTime 类。有一种方法可以让您指定自己的解析日期格式。 ruby-doc.org/stdlib/libdoc/date/rdoc/classes/…

标签: ruby-on-rails ruby chronic


【解决方案1】:

作为一个选项:

irb(main):016:0> Chronic.parse("#{Time.now.year}/8/15")
=> 2011-08-15 12:00:00 +0300

【讨论】:

  • 我将不得不抓住这一点并使用正则表达式。输入由用户输入,我无法控制输入到方法中的内容。
  • 我的意思是用户可以输入 '8/15' 或 'Aug. 15'等。所以我只想在输入正则表达式说他们输入'%d/%d'之前添加年份
【解决方案2】:

最好的方法是使用 Ruby 提供的常规 DateTime 解析。 例如,您可以通过调用来解析日期:

ruby-1.9.2-p290 :001 > require 'date'
 => true 
ruby-1.9.2-p290 :002 > DateTime.strptime("8/15", "%m/%d")
 => #<DateTime: 2011-08-15T00:00:00+00:00 (4911577/2,0/1,2299161)> 
ruby-1.9.2-p290 :003 > 

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多