Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
7.19. Взаимные преобразования объектов Date, Time и DateTime
В Ruby есть три основных класса для работы с датами и временем:
TimeDateDateTime• Класс
Time• Класс
DateTime• Класс
DateTimeDateDateTimeОднако не думайте, что объект
DateTimeDateTimeDateTimeusecdst?Итак, у нас есть три класса. К сожалению, не существует стандартного способа преобразовать один из них в любой другой. По мере развития Ruby подобные шероховатости будут устраняться. А пока обойдемся методами, приведенными в листинге 7.2. Спасибо Кирку Хейнсу (Kirk Haines).
class Time def to_date Date.new(year, month, day) rescue NameError nil end def to_datetime DateTime.new(year, month, day, hour, min, sec) rescue NameError nil endendclass DateTime def to_time Time.local(year,month,day,hour,min,sec) endendclass Date def to_time Time.local(year,month,day) endendЭти методы пропускают наверх все исключения, кроме
NameErrorrequiredateDateDateTimeto_datetimeto_datenil7.20. Извлечение даты и времени из строки
Дата и время могут быть представлены в виде строки самыми разными способами: в полной или сокращенной форме, с разной пунктуацией, различным порядком компонентов и т.д. Из-за такого разнообразия очень сложно написать код, интерпретирующий символьную строку как дату. Рассмотрим несколько примеров:
s1 = "9/13/98 2:15am"s2 = "1961-05-31"s3 = "11 July 1924"s4 = "April 17, 1929"s5 = "20 July 1969 16:17 EDT"s6 = "Mon Nov 13 2000"s7 = "August 24, 79" # День разрушения Помпеи.s8 = "8/24/79"К счастью, большую часть работы за нас уже проделали. В модуле
ParseDateparsedatenilrequire "parsedate.rb"include ParseDatep parsedate(s1) # [98, 9, 13, 2, 15, nil, nil, nil]p parsedate(s2) # [1961, 5, 31, nil, nil, nil, nil, nil]p parsedate(s3) # [1924, 7, 11, nil, nil, nil, nil, nil]p parsedate(s4) # [1929, 4, 17, nil, nil, nil, nil, nil]p parsedate(s5) # [1969, 7, 20, 16, 17, nil, "EDT", nil]p parsedate(s6) # [2000, 11, 13, nil, nil, nil, nil, 1]p parsedate(s7) # [79, 8, 24, nil, nil, nil, nil, nil]p parsedate(s8,true) # [1979, 8, 24, nil, nil, nil, nil, nil]Последние две строки иллюстрируют назначение второго параметра
parsedateguess_years8guess_yeartrues7Правило применения параметра
guess_yearguess_yeartrue
