有人可以用以下行解释为什么我会收到无效的日期错误吗?
Date.strptime("3082013",'%-m%d%Y')
据我了解,%-m
应该找一个月没有领先0
。但是,执行此代码会返回
ArgumentError: invalid date
假设我无法更改传入日期的格式,那么处理这种情况的最佳方法是什么?
有人可以用以下行解释为什么我会收到无效的日期错误吗?
Date.strptime("3082013",'%-m%d%Y')
据我了解,%-m
应该找一个月没有领先0
。但是,执行此代码会返回
ArgumentError: invalid date
假设我无法更改传入日期的格式,那么处理这种情况的最佳方法是什么?
在左边加一个零:
Date.strptime("3082013".rjust(8,'0'),'%-m%d%Y')
问题是它strptime
不支持减号 (-) 标志。
您需要在月/日/年之间添加某种分隔符。否则 Ruby 怎么知道“3082013”是 3/08/2013 还是 30/8/2013?
有时你必须降低一点,然后做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)>