Відповіді:
DateTime.strptime дозволяє вказати формат і перетворити рядок у DateTime.
%d/%b/%Y:%H:%M:%S %Z
%Y
буде відповідати як 2015
(як очікувалося), 2016-foo-bar
так і припиняється, коли бачить 2016
. Така поведінка відповідає аналогу С; однак функція C повертає позицію кінця відповідності (наприклад, першу -
у випадку "2016"), щоб ми вирішили, чи відповідає відповідність; у Ruby він повертає a DateTime
, тому ми не можемо сказати, чи є ще щось після цього.
Не повинно це також працювати?
"30/Nov/2009 16:29:30 +0100".to_datetime
require 'active_support/all'
а потім "30/Nov/2009 16:29:30 +0100".to_datetime
(насправді вам не потрібні всі розширення active_support, але удачі, з’ясувавши, які саме вибірково вимагати)
to_datetime
додавання до String
об’єктів:require 'active_support/core_ext/string/conversions'
У мене був успіх з:
require 'time'
t = Time.parse(some_string)
Для китайських розробників Rails:
DateTime.strptime('2012-12-09 00:01:36', '%Y-%m-%d %H:%M:%S')
=> Sun, 09 Dec 2012 00:01:36 +0000
в Ruby 1.8 модуль ParseDate перетворить цей та багато інших форматів дати / часу. Однак він не має витонченої справи з товстою кишкою між роком та годиною. Якщо припустити, що двокрапка є друкарською помилкою і насправді є пробілом, тоді:
#!/usr/bin/ruby1.8
require 'parsedate'
s = "30/Nov/2009 16:29:30 +0100"
p Time.mktime(*ParseDate.parsedate(s)) # => Mon Nov 30 16:29:30 -0700 2009
Ви також можете проаналізувати часовий рядок дати з заданим часовим поясом:
zone = "Pacific Time (US & Canada)"
ActiveSupport::TimeZone[zone].parse("2020-05-24 18:45:00")
=> Sun, 24 May 2020 18:45:00 PDT -07:00