2012-07-23 131 views
21

我有一个字符串20120119,它表示格式为'YYYYMMDD'的日期。Ruby中的解析日期字符串

我想把这个字符串解析成一个代表Date的Ruby对象,这样我就可以做一些基本的日期计算,比如diff与今天的日期。

我正在使用版本1.8.6(要求)。

回答

56

你可以使用Ruby的标准库提供的Date.strptime方法:

require 'date' 
string = "20120723" 
date = Date.strptime(string,"%Y%m%d") 

或者,如评论所说,你可以使用Date.parse,因为试探在这种情况下正常工作:

require 'date' 
string = "20120723" 
date = Date.parse(string) 

如果日期无效,两者都将升起ArgumentError

require 'date' 
Date.strptime('2012-March', '%Y-%m') 
#=> ArgumentError: invalid date 

Date.parse('2012-Foo') # Note that '2012-March' would actually work here 
#=> ArgumentError: invalid date 

如果您还想表示小时,分钟等,则应查看DateTime。 DateTime还提供parse方法,其工作方式与Date上的解析方法类似。 strptime也是如此。

+1

Date.parse也适用于YYYYMMDD。不需要格式字符串。 – rrhartjr 2012-07-23 17:42:21

+1

解析异常如何? – chrisapotek 2013-07-25 22:54:02

+0

有没有办法检测一个字符串是否会抛出解析异常? – theUtherSide 2016-02-05 21:21:59