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


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

DD-MM-YYYY
6 56

6 ответов:

Date.parse('31-12-2010')

как вариант Date#strptime(str, format).

потому что в США они получают даты назад, важно не просто использовать Date.parse() потому что вы найдете 9/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("20-08-2010")
# => Fri Aug 20 00:00:00 +0200 2010

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

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

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 

но Рубин разбирает это как дату!

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

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 = время.местные(2012, 1, 20, 12, 0, 0).даты

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