在Ruby中将字符串解析为日期

时间:2013-06-20 20:08:41

标签: ruby parsing date date-parsing

我知道这听起来像是一个重复的问题,但我认为这种情况有所不同。如果确实是这样,我会删除这篇文章。

我有一个字符串,其中包含以下格式的日期:星期六,6月20日

我想将其解析为Date变量,然后将其递增到第二天。

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

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

但是这给了我以下错误:

invalid date (ArgumentError)

我从Ruby: convert string to date

得到了这个想法

到目前为止,我所看到的所有答案都在解析包含完整信息的字符串(整个月或一周中的某一天)。我正在努力做甚么可能吗?如果没有任何关于解决方案的建议将是最受欢迎的。

2 个答案:

答案 0 :(得分:4)

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

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

  

%a - 缩写名称(“太阳”)

     

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

答案 1 :(得分: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"