Как создать объект даты Ruby из следующей строки?
DD-MM-YYYY
Как создать объект даты Ruby из следующей строки?
DD-MM-YYYY
Date.parse('31-12-2010')
В качестве альтернативы Date#strptime(str, format)
.
Поскольку в США они возвращают даты назад, важно не просто использовать Date.parse()
, потому что 11 сентября 2001 года в США может быть 11 сентября 2001 года, а в остальном мире - 9 ноября 2001 года. Чтобы быть полностью однозначным, используйте Date::strptime(your_date_string,"%d-%m-%Y")
для правильного анализа строки даты в формате dd-mm-yyyy
.
Попробуйте это, чтобы быть уверенным:
>irb
>> require 'date'
=> true
>> testdate = '11-09-2001'
=> "11-09-2001"
>> converted = Date::strptime(testdate, "%d-%m-%Y")
=> #<Date: 4918207/2,0,2299161>
>> converted.mday
=> 11
>> converted.month
=> 9
>> converted.year
=> 2001
Для других strptime
форматов см. http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html
Также я всегда проверяю, установлен ли базовый часовой пояс на :utc
, если мой веб-сайт будет обрабатывать какие-либо даты, и использую Javascript
на стороне клиента для отображения локального времени.
Вы можете использовать Time # parse.
Time.parse("20-08-2010")
# => Fri Aug 20 00:00:00 +0200 2010
Однако, поскольку Ruby может анализировать дату как "MM-DD-YYYY", лучший способ - перейти с DateTime # strptime, где вы можете указать формат ввода.
Подобно этому Вы можете получить время Object из строки следующим образом:
t = Time.parse "9:00 PM"
=> 2013-12-24 21:00:00 +0530
t = Time.parse "12:00 AM"
=> 2013-12-24 00:00:00 +0530
Но Ruby разобрал это как Date!
Таким образом, вы можете использовать столбец как строку.
add_column :table_name, :from, :string, :limit => 8, :default => "00:00 AM", :null => false
add_column :table_name, :to, :string, :limit => 8, :default => "00:00 AM", :null => false
И вы можете назначить строковый объект атрибуту,
r.from = "05:30 PM"
r.save
И проанализируйте строку для получения объекта времени,
Time.zone.parse("02:00 PM")
Я считаю этот подход более простым, так как он не должен указывать формат даты для синтаксического анализатора:
date1 = Time.local(2012, 1, 20, 12, 0, 0).to_date
Не обязательно для этого формата строки, но лучше всего использовать утилиту синтаксического анализа времени, которую я знаю, Chronic, которая доступна как драгоценный камень и работает около 99,9% случаев для человеческих отформатированных дат/раз.