Имея тот же вопрос, я обнаружил, что застенчивость https://github.com/adzap/timeliness
Мне нравится, что он ограничивает или проверяет формат ввода.
Timeliness.parse('2010-09-08 12:13:14', :date, :strict => true) #=> nil
Timeliness.parse('2010-09-08 12:13:14', :time, :strict => true) #=> nil
Timeliness.parse('2010-09-08 12:13:14', :datetime, :strict => true) #=> Wed Sep 08 12:13:14 1000 2010 i.e. the whole string is used
ограничивает формат
Timeliness.parse('2010-09-08 12:13:14', :format => 'yyyy-mm-dd hh:nn:ss') #=> Wed Sep 08 12:13:14 UTC 2010
Timeliness.parse('08/09/2010 12:13:14', :format => 'yyyy-mm-dd hh:nn:ss') #=> nil
Расширяется с помощью пользовательских форматов и токенов.Это довольно быстро.До 60% быстрее, чем метод анализа времени / даты.Контролируйте строгость парсера.Управление поведением неоднозначных форматов даты (США против европейских, например, мм / дд / гг, дд / мм / гг).Поддержка I18n (в течение нескольких месяцев), если загружен I18n gem.Меньше WTF, чем метод синтаксического анализа времени / даты.Не имеет зависимостей.Работает с Ruby MRI 1.8. *, 1.9.2, Rubinius и JRuby.