2012-07-23 130 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