迭代字符串数组并执行正则表达式

时间:2011-07-23 00:11:20

标签: ruby regex arrays string datetime

给定一个DateTime字符串数组,我想只获取时间,例如10:30:00。 到目前为止,我想出了这个,但它不会给我正确的结果:

["2011-07-30 10:00:00","2011-07-30 12:00:00"].each{|item| item.match(/\d{2}:\d{2}:\d{2}/)}

2 个答案:

答案 0 :(得分:4)

如果所有的字符串都是这样的话,那就做一些子字符串修改:

a     = ["2011-07-30 10:00:00","2011-07-30 12:00:00"]
times = a.map { |e| e[11,8] }

如果您的时间戳包含2011-07-30 10:00:00.11232011-07-30T10:00:002011-07-30 10:00:00 +0700等内容,这也会有用。

如果你想对未来更友好,那么你可以这样做:

off   = '9999-99-99 '.length
len   = '99:99:99'.length
times = a.map { |e| e[off, len] }

所以没有人会猜到118的全部内容。

答案 1 :(得分:4)

您可以使用Ruby中优秀的DateTime库来实现相同的目标。

require 'date'

["2011-07-30 10:00:00","2011-07-30 12:00:00"].map{|item|
  DateTime.parse(item).strftime("%H:%M:%S")
}
 => ["10:00:00", "12:00:00"] 

虽然,穆的答案很棒。