2012-07-23 14 views
21

Mam ciąg 20120119, który reprezentuje datę w formacie 'YYYYMMDD'.Łańcuch daty analizy w Ruby

Chcę przetworzyć ten ciąg znaków na obiekt Ruby, który reprezentuje datę, dzięki czemu mogę wykonać podstawowe obliczenia daty, takie jak porównanie z dzisiejszą datą.

Używam wersji 1.8.6 (wymaganie).

Odpowiedz

56

Można użyć metody Date.strptime przewidzianego w standardowej biblioteki Ruby:

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

Alternatywnie, jak zasugerowano w komentarzach, można użyć Date.parse, ponieważ heurystyka działa poprawnie w tym przypadku:

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

Obie podniosą ArgumentError, jeśli data jest nieprawidłowa:

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 

Jeśli chcesz również reprezentować godziny, minuty i tak dalej, powinieneś spojrzeć na DateTime. DateTime udostępnia również metodę parse, która działa podobnie do metody analizy paczek pod adresem Date. To samo dotyczy strptime.

+1

Date.parse działa również dla YYYYMMDD. Nie jest wymagany ciąg formatu. – rrhartjr

+1

Co z wyjątkiem analizowania składni? – chrisapotek

+0

Czy istnieje sposób na wykrycie, czy ciąg wyrzuci wyjątek analizy składniowej? – theUtherSide

Powiązane problemy