2013-05-19 6 views
1

У меня есть строка, которая выглядит как:Как разбить строку на отдельные компоненты для анализа в DateTime?

20130518134721 
yyyymmddhhmmss 

В основном это время суток. Зная формат строки и зная, что год дополняется четырьмя цифрами, а все остальные дополняются двумя цифрами, как я могу разделить эту строку, чтобы я мог извлечь определенную информацию, такую ​​как месяц или час?

+1

Хотя вопрос является дубликатом «возможного дубликата», лежащий в основе необходимости совершенно другая, и не является дубликатом на все, но вопрос о том, как разбирать строки даты. –

ответ

3

Вы можете использовать DateTime.strptime, чтобы преобразовать String в объект DateTime. Вы можете сделать что-то вроде:

date = DateTime.strptime("20130518134721", "%Y%m%d%H%M%s") → datetime 

После этого, вы можете получить доступ к различным методам Date объекта в рубин, как hour или mon.

date.hour    
#=> 13 
date.mon 
#=> 5 

Кроме того, не забудьте require 'date' использовать DateTime объект.

1
require 'date' 
d = DateTime.parse("20130518134721") 
p d.hour #=> 13 
p d.mon #=> 5 
p d.min #=> 47 
p d.day #=> 18 
p d.year #=> 2013 
+0

'parse' полезен и довольно умный, но также обманывается. Если вы знаете формат, лучше использовать 'strptime', который не теряет времени, пытаясь разобраться, какой шаблон использовать. Я бы рекомендовал посмотреть [Chronic] (http://chronic.rubyforge.org), если вы хотите полагаться на разбор строк произвольной формы на даты/время. –

1

Даты лучше всего обрабатываются классом Date, как показали другие. Разделение строки на подстроки с фиксированной шириной в целом может быть сделано с помощью unpack метода:

year, month, day, hour, min, sec = "20130518134721".unpack("A4A2A2A2A2A2") 
puts day #=> 18 
Смежные вопросы