Вход/Регистрация
Программирование на языке Ruby
вернуться

Фултон Хэл

Шрифт:

t0 = Time.local(2000,11,10,22,15) # 10 Nov 2000 22:15

t1 = Time.local(2000,11,9,23,45) # 9 Nov 2000 23:45

t2 = Time.local(2000,11,12,8,10) # 12 Nov 2000 8:10

t3 = Time.local(2000,11,11,10,25) # 11 Nov 2000 10:25

if t0 < t1 then puts "t0 < t1" end

if t1 != t2 then puts "t1 != t2" end

if t1 <= t2 then puts "t1 <= t2" end

if t3.between?(t1,t2)

 puts "t3 находится между t1 и t2"

end

# Все четыре предложения if возвращают true.

7.16 Прибавление интервала к моменту времени

Можно получить новый момент времени, прибавив к существующему интервал. Последний представляется целым числом, которое интерпретируется как число секунд.

t0 = Time.now

t1 = t0 + 60 # Ровно одна минута с момента t0.

t2 = t0 + 3600 # Ровно один час с момента t0.

t3 = t0 + 86400 # Ровно один день с момента t0.

Может пригодиться функция

dhms2sec
(определена в разделе 7.6). Напомним, что по умолчанию параметры, соответствующие часам, минутам и секундам, равны 0.

t4 = t0 + dhms2sec(5,10) # 5 дней, 10 часов в будущем.

t5 = t0 + dhms2sec(22,18,15) # 22 дня, 18 часов, 15 минут в будущем.

t6 = t0 - dhms2sec(7) # Ровно неделю назад.

Не забывайте, что для получения момента времени в прошлом нужно вычитать, как при вычислении

t6
в примере выше.

7.17. Вычисление разности между двумя моментами времени

Можно вычислить интервал между двумя моментами времени. В результате вычитания одного объекта

Time
из другого получаем число секунд:

today = Time.local(2000,11,10)

yesterday = Time.local(2000,11,9)

cliff = today - yesterday # 86400 секунд.

И снова оказывается полезной функция

sec2dhms
, которая определена в разделе 7.6.

past = Time. Local(1998,9,13,4,15)

now = Time.local(2000,11,10,22,42)

diff = now - past unit = sec2dhms(diff)

puts "#{unit[0]} дней," # 789 дней,

puts "#{unit[1]} часов," # 18 часов,

puts "#{unit[2]} минут" # 27 минут

puts "и #{unit[3]} секунд." # и 0 секунд.

7.18. Работа с конкретными датами (до точки отсчета)

В стандартной библиотеке

Date
есть одноименный класс для работы с датами, предшествующими полуночи 1 января 1970 года.

Несмотря на некоторое перекрытие с классом

Time
, между ними есть существенные различия. Самое главное состоит в том, что класс
Date
вообще игнорирует время, то есть работает с точностью до одного дня. Кроме того, класс
Date
строже контролирует ошибки, чем класс
Time
: попытка обратиться к 31 июня (или к 29 февраля невисокосного года) приведет к исключению. Код даже «знает» о различных датах перехода на григорианский календарь в Италии и Англии (в 1582 и 1752 году соответственно) и может обнаружить «несуществующие» даты, появившиеся в результате такого перехода. Эта стандартная библиотека — паноптикум интересного и местами загадочного кода. К сожалению, у нас нет места для более подробного разговора о ней.

7.19. Взаимные преобразования объектов Date, Time и DateTime

В Ruby есть три основных класса для работы с датами и временем:

Time
,
Date
и
DateTime
. Опишем их особенности:

• Класс

Time
преимущественно обертывает соответствующие функции из стандартной библиотеки языка С. Они, как правило, опираются на точку отсчета в UNIX и потому не способны представлять моменты времени раньше 1970 года.

• Класс

Date
создан для преодоления недостатков класса
Time
. Он без труда справляется с датами в более отдаленном прошлом — например, позволяет представить день рождения Леонардо да Винчи (15 апреля 1452 года), и, кроме того, знает о реформе календаря. Но у него есть свои слабые места: он работает только с датами, игнорируя время.

• Класс

DateTime
наследует
Date
и пытается компенсировать отсутствующие в нем возможности. Он может представлять даты не хуже
Date
и время не хуже
Time
. Часто его способ представления даты и времени оказывается наилучшим.

  • Читать дальше
  • 1
  • ...
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: