2013-06-20 2 views
-1

У меня есть несколько строк, которые являются датами, которые я нахожу с помощью регулярных выраженийСинтаксическое время из строки в Рубине

d = myData.scan(/....\d*..\d{4}/) 

Каких yeilds, например, «Джун 15, 2013,» хотя эти даты меняться в различных случаях. Я хотел бы проанализировать их и преобразовать их с аббревиатуры месяца в полный месяц.

Это работает (требуется 'время'):

Time.parse("Jun 15, 2013").strftime("%B %d, %Y") 
=> "June 15, 2013" 

Но это не делает:

Time.parse("d").strftime("%B %d, %Y") 

Как я уже сказал, фактические даты меняются, и я пытаюсь автоматизировать этот процесс со сценарием. Мы ценим любые предложения.

ОБНОВЛЕНИЕ: Извините, я просто пропустил шаг, я думаю. Я думал, что я уже пробовал это, но, наверное, нет. Это работает:

d = myData.scan(/....\d*..\d{4}/) 
d2 = Time.parse("d") 
date = Time.parse("d2").strftime("%B %d, %Y") 
+3

делает ваш фактический исходный код передать строку '' Time.parse' (синтаксический разбор ("d") '), или вы используете переменную? –

+0

Мы знаем, что код не может передать '' d '' '' '' '', потому что Ruby этого не допускает. 'Time.parse ('d')' возвращает 'ArgumentError: информация о времени в" d "'. В результате ни один из кодов, использующих 'parse (" d ")' или 'parse (" d2 ")', не мог работать, несмотря на то, что говорит OP. –

ответ

1

Из того, что @craigeley упоминалось выше, если d ваши данные:

Time.parse(d).strftime("%B %d, %Y") 
+1

'scan' возвращает массив, поэтому' d [0] 'должен работать – Stefan

+0

Как heck' # parse' даже не упоминается в 'Time' [API docs] (http://ruby-doc.org/core -2.2.2/Time.html) !? Как можно узнать о существовании этого метода? – akostadinov

+0

Это в стандартной библиотеке http://ruby-doc.org/stdlib-2.1.4/libdoc/time/rdoc/Time.html –

2

Ввод ваших имен переменных в кавычках не работает. Таким образом, вместо:

Time.parse("d") 

вы должны использовать:

Time.parse(d) 

Кроме scan возвращает массив.

"Jun 15, 2013".scan(/....\d*..\d{4}/)  #=> ["Jun 15, 2013"] 

Append [0], чтобы получить массив в первый элемент:

"Jun 15, 2013".scan(/....\d*..\d{4}/)[0] #=> "Jun 15, 2013" 

Полный пример:

my_data = "Jun 15, 2013" 
d = my_data.scan(/....\d*..\d{4}/)[0] 
date = Time.parse(d).strftime("%B %d, %Y") 
#=> "June 15, 2013"