Как мне создать объект даты Ruby из строки? - PullRequest
66 голосов
/ 20 августа 2010

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

DD-MM-YYYY

Ответы [ 6 ]

124 голосов
/ 20 августа 2010
Date.parse('31-12-2010')

В качестве альтернативы Date#strptime(str, format).

30 голосов
/ 15 сентября 2011

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

16 голосов
/ 20 августа 2010

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

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

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

1 голос
/ 22 ноября 2014

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

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

1 голос
/ 24 декабря 2013

Вот так. Вы можете получить объект Time из строки, например:

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 анализирует это как дату!

Так что вы можете использовать столбец как строку.

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")
0 голосов
/ 12 ноября 2014

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

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