Подтвердить что ты не робот

Как создать объект даты Ruby из строки?

Как создать объект даты Ruby из следующей строки?

DD-MM-YYYY
4b9b3361

Ответ 2

Поскольку в США они возвращают даты назад, важно не просто использовать 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 на стороне клиента для отображения локального времени.

Ответ 3

Вы можете использовать Time # parse.

Time.parse("20-08-2010")
# => Fri Aug 20 00:00:00 +0200 2010

Однако, поскольку Ruby может анализировать дату как "MM-DD-YYYY", лучший способ - перейти с DateTime # strptime, где вы можете указать формат ввода.

Ответ 4

Подобно этому Вы можете получить время 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")

Ответ 5

Я считаю этот подход более простым, так как он не должен указывать формат даты для синтаксического анализатора:

date1 = Time.local(2012, 1, 20, 12, 0, 0).to_date

Ответ 6

Не обязательно для этого формата строки, но лучше всего использовать утилиту синтаксического анализа времени, которую я знаю, Chronic, которая доступна как драгоценный камень и работает около 99,9% случаев для человеческих отформатированных дат/раз.