【问题标题】:Parsing a string to a date in Ruby将字符串解析为 Ruby 中的日期
【发布时间】:2023-04-06 19:16:02
【问题描述】:

我知道这听起来像是一个重复的问题,但我认为这种情况有所不同。如果是真的,我会删除这个帖子。

我有一个包含以下格式的日期的字符串:Thu, Jun. 20

我想将其解析为一个 Date 变量,然后将其递增到下一天。

到目前为止,我已经完成了

text = "Thu, Jun. 20"
date = Date.new
date = Date.strptime(text, '{%a, %m, %d}')

但这给了我以下错误:

invalid date (ArgumentError)

这个想法来自:Ruby: convert string to date

到目前为止,我看到的所有答案都是解析包含完整信息(整月或一周中的一天)的字符串。我想要做的甚至可能吗?如果没有关于解决方法的任何建议,将不胜感激。

【问题讨论】:

  • 您正在寻找%a, %m, %d,但您的格式是%a, %m. %d
  • 你试过简单的Date.parse text吗?

标签: ruby parsing date date-parsing


【解决方案1】:

您使用了错误的日期格式。解析后,可以使用加号或减号来更改日期。

参考:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html#method-i-strftime

%a - 缩写名称(“Sun”)

%b - 缩写月份名称(“Jan”)

%d - 一个月中的某天,零填充 (01..31)

代码:

1.9.3p392 :003 > require 'date'
 => true 
1.9.3p392 :008 > date = Date.strptime(text, '%a, %b. %d')
 => #<Date: 2013-06-20 ((2456464j,0s,0n),+0s,2299161j)> 
1.9.3p392 :009 > date + 1
 => #<Date: 2013-06-21 ((2456465j,0s,0n),+0s,2299161j)> 
1.9.3p392 :010 > date - 1
 => #<Date: 2013-06-19 ((2456463j,0s,0n),+0s,2299161j)> 

【讨论】:

    【解决方案2】:

    为了满足您的需求我想将其解析为一个 Date 变量,然后将其递增到第二天。我在下面尝试了:

    require 'date'
    
    d = Date.parse("Thu, Jun. 20") 
    # => #<Date: 2013-06-20 ((2456464j,0s,0n),+0s,2299161j)>
    d.to_s # => "2013-06-20"
    d.next.to_s # => "2013-06-21"
    

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 2012-07-21
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 2013-08-10
      • 2013-06-05
      • 1970-01-01
      相关资源
      最近更新 更多