2013-05-19 29 views
1

我有一个字符串,它看起来像:如何将字符串拆分为独立的组件以解析为DateTime?

20130518134721 
yyyymmddhhmmss 

这基本上是一天的时间。知道字符串的格式,并知道年份被填充为四位数字,其他所有字符都填充为两位数字,那么如何分割此字符串以便我可以提取诸如月份或小时等特定信息?

+1

虽然问题是“可能重复”的复制,底层需要的是完全不同的,并且是不重复的,在所有,但是关于如何解析日期字符串的问题。 –

回答

3

您可以使用DateTime.strptimeString转换为DateTime对象。你可以这样做:

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

之后,你可以访问到像hourmon在红宝石Date对象的不同方法。

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