2010-04-27 2 views
54

В Ruby, что является лучшим способом преобразования строки формата: "{ 2009, 4, 15 }" на дату?Ruby: convert string to date

+0

Смотрите также http://stackoverflow.com/q/3599239/1569 –

ответ

125

Вы также можете использовать Date.strptime:

Date.strptime("{ 2009, 4, 15 }", "{ %Y, %m, %d }") 
+0

Что делать, если месяц недействителен id ... есть метод, который возвращает нуль, а не создает исключение. – Ross

+2

@ Ross: Что не так с его переносом в 'begin' и' rescue ArgumentError' и в этом случае возвращает 'nil'? – robinst

6

Другой способ:

s = "{ 2009, 4, 15 }" 
d = Date.parse(s.gsub(/, */, '-')) 
2
def parse_date(date) 
    Date.parse date.gsub(/[{}\s]/, "").gsub(",", ".") 
end 

date = parse_date("{ 2009, 4, 15 }") 
date.day 
#=> 15 
date.month 
#=> 4 
date.year 
#=> 2009 
0

Другой способ:

Date.new(*"{ 2009, 04, 15 }".scan(/\d+/).map(&:to_i))