0

有人可以用以下行解释为什么我会收到无效的日期错误吗?

Date.strptime("3082013",'%-m%d%Y')

据我了解,%-m应该找一个月没有领先0。但是,执行此代码会返回

ArgumentError: invalid date

假设我无法更改传入日期的格式,那么处理这种情况的最佳方法是什么?

4

4 回答 4

3

在左边加一个零:

Date.strptime("3082013".rjust(8,'0'),'%-m%d%Y')
于 2013-03-29T14:44:35.257 回答
1

问题是它strptime不支持减号 (-) 标志。

于 2013-03-29T14:48:30.673 回答
0

您需要在月/日/年之间添加某种分隔符。否则 Ruby 怎么知道“3082013”​​是 3/08/2013 还是 30/8/2013?

于 2013-03-29T14:44:11.580 回答
0

有时你必须降低一点,然后做Date.strptime对你有用的事情:

"3082013".scan(/(\d+) (\d{2}) (\d{4})/x).first
=> ["3", "08", "2013"]

如果"308213"MMDDYYYY格式:

mon, day, year = "03082013".scan(/(\d+) (\d{2}) (\d{4})/x).first.map(&:to_i)
=> [3, 8, 2013]

Or, if you know that it's in DDMMYYYY format, switch mon and day:

day, mon, year = "03082013".scan(/(\d+) (\d{2}) (\d{4})/x).first.map(&:to_i)
=> [3, 8, 2013]

Then you can create a Date object:

Date.new(year, mon, day)
=> #<Date: 2013-03-08 ((2456360j,0s,0n),+0s,2299161j)>
于 2013-03-29T16:40:04.593 回答