перебрать массив строк и выполнить регулярное выражение - PullRequest
1 голос
/ 23 июля 2011

Учитывая массив строк 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 ]

4 голосов
/ 23 июля 2011

Вы могли бы добиться того же, используя превосходную библиотеку DateTime от Ruby.

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"] 

Хотя, ответ му хорош.

4 голосов
/ 23 июля 2011

Если все строки действительно такие, просто выполните подстановку подстрок:

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.1123, 2011-07-30T10:00:00 или 2011-07-30 10:00:00 +0700.

Если вы хотите быть дружелюбнее к будущему, то вы можете сделать это:

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

так что никто не должен был бы угадать, о чем были 11 и 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...