Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
А что сказать о строке
s1Учтите, что
parsedateСледует особо отметить склонность этого кода к «американизмам». Когда американец пишет 3/4/2001, он обычно имеет в виду 4 марта 2001 года. В Европе и большинстве других мест это означает 3 апреля. Но если при записи всех дат применяется одно и то же соглашение, ничего страшного не произойдет. Ведь возвращается просто массив, и ничто не мешает вам мысленно переставить первый и второй элементы. Кстати, имейте в виду, что вышеописанным образом интерпретируется даже такая дата, как 15/3/2000, хотя нам совершенно очевидно, что 15 — это день, а не месяц. Метод же
parsedate7.21. Форматирование и печать даты и времени
Для получения канонического представления даты и времени служит метод
asctimectimeАналогичный результат дает метод
to_sС помощью метода
strftimeTime%a%A%U%W%H%M%S%I%p%b "Jan"%B "January"%c %d 1..31%j 1..366%m 1..12%w 0..6%x %y %Y %Z %% %Дополнительную информацию вы найдете в справочном руководстве по языку Ruby.
7.22. Преобразование часовых поясов
Обычно приходится работать только с двумя часовыми поясами: GMT (или UTC) и тем, в котором вы находитесь.
Метод
gmtimeutcМожет быть, вы думаете, что можно просто преобразовать момент времени в массив, подменить часовой пояс и выполнить обратное преобразование? Проблема в том, что все методы класса, к примеру
localgmmktimeutcTimeЕсть обходной путь для преобразования часового пояса. Но предполагается, что вы заранее знаете разницу во времени. Взгляните на следующий фрагмент:
mississippi = Time.local(2000,11,13,9,35) # 9:35 am CSTcalifornia = mississippi - 2*3600 # Минус два часа.time1 = mississippi.strftime("%X CST") # 09:35:00 CSTtime2 = california.strftime("%X PST") # 07:35:00 PSTСпецификатор
%xstrftimehh:mm:ss7.23. Определение числа дней в месяце
В текущей версии Ruby еще нет встроенной функции для этой цели. Но ее можно без труда написать самостоятельно:
require 'date'def month_days(month,year=Date.today.year) mdays = [nil,31,28,31,30,31,30,31,31,30,31.30,31] mdays[2] = 29 if Date.leap?(year) mdays[month]enddays = month_days(5) # 31 (May)days = month_days(2,2000) # 29 (February 2000)days = month_days(2,2100) # 28 (February 2000)7.24. Разбиение месяца на недели
Представьте, что нужно разбить месяц на недели, например чтобы напечатать календарь. Эту задачу решает приведенный ниже код. Возвращаемый массив состоит из подмассивов, по семь элементов в каждом. При этом первому элементу каждого внутреннего массива соответствует воскресенье. Начальные элементы для первой недели и конечные для второй могут быть равны
nildef calendar(month,year) days = month_days(month,year) t = Time.mktime(year,month,1) first = t.wday list = *1..days weeks = [[]] week1 = 7 - first week1.times { weeks[0] << list.shift } nweeks = list.size/7 + 1 nweeks.times do |i| weeks[i+1] ||= [] 7.times do break if list.empty?
