Как сопоставить формат часового пояса YYYY-MM-DDThh: mm: ssTZD в рубине - PullRequest
6 голосов
/ 18 января 2012

Я хотел бы проверить формат iso8601 для даты, введенной в ruby, например start_date = "2011/05/05" должно соответствовать формату 2011-05-05T00: 00 : 00-04: 00 и ошибки возвращены соответственно. Должны ли мы использовать регулярное выражение здесь или какой-либо метод для этого существует?

Ответы [ 2 ]

8 голосов
/ 18 января 2012

Звучит так, как вы хотите Time.iso8601:

require 'time'
iso = Time.iso8601(start_date)

Подробнее см. в этом блоге .

РЕДАКТИРОВАТЬ: Вот короткая, но полная программа испытаний, которая работает:

require 'time'
text = "2011-05-05T00:00:00-04:00"
parsed = Time.iso8601(text)
puts parsed

Выход:

Thu May 05 04:00:00 UTC 2011
4 голосов
/ 18 января 2012

Для проверки регулярных выражений (с дополнительными микросекундами и часовым поясом) используйте:

^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$

Проверка на: http://rubular.com/r/qFFrhzvdsS

Не рекомендуется в сценариях, когда производительность имеет значение !

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