Программирование на языке Ruby
Шрифт:
Я бы с удовольствием объяснил вам этот алгоритм, только вот сам его не понимаю… Что-то надо принимать на веру, а в данном случае это особенно уместно!
7.5. Вычисление n-ого дня недели в месяце
Иногда, зная год и месяц, хочется вычислить дату, скажем, третьего понедельника или второго вторника в этом месяце. Такую задачу решает код в листинге 7.1.
Чтобы найти n-ое вхождение данного дня недели, мы передаем n в качестве первого параметра. Второй параметр — номер дня недели (0 — воскресенье, 1 — понедельник и т.д.). Третий и четвертый параметры — месяц и год соответственно.
Странный код в конце текста метода призван скорректировать давнюю традицию, принятую в функциях работы с датами. Если вы думаете, что попытка создать объект для представления 31 ноября приведет к ошибке, то разочарую вас. Почти все системы молчаливо преобразуют эту дату в 1 декабря. Если вы давным-давно программируете в UNIX, то, наверное, полагаете, что так и должно быть. Другие сочтут это ошибкой.
Не станем спорить о том, что должна делать системная библиотека и должен ли Ruby изменить это поведение. Но мы не хотим, чтобы наша процедура продолжала эту традицию. Если вы ищете, к примеру, пятую пятницу в ноябре 2000 года, то она вернет
7.6. Преобразование из секунд в более крупные единицы
Иногда нужно преобразовать заданное число секунд в дни, часы, минуты и секунды. Это можно сделать следующим образом:
Можно было пойти и дальше. Но неделю вряд ли назовешь полезной единицей, месяц не слишком точно определен, а год не всегда содержит одно и то же число дней.
Ниже приведена также обратная функция:
7.7. Вычисление промежутка времени, прошедшего от точки отсчета
По разным причинам может понадобиться перейти от внутреннего (традиционного) представления времени к стандартному. В системе время хранится как число секунд, прошедших с точки отсчета.
Метод класса
Обратная функция — это метод экземпляра
Если нужны микросекунды, и система поддерживает такую точность, то можно воспользоваться методом
7.8. Високосные секунды
Хотите иметь дело с «високосными» секундами? Мой совет: не делайте этого.
Високосные секунды — это не миф. Одна была добавлена в 2005 году; его последняя минута состояла из 61 секунды, а не из 60. Библиотечные функции уже много лет учитывают возможность появления минут, состоящих из 61 секунды. Но наш опыт показывает, что большинство операционных систем високосные секунды игнорирует. Говоря «большинство», мы имеем в виду все, с которыми когда-либо сталкивались.
10
Пер. О. Румер. — Прим. ред.
Протокол "Наследник"
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Огненный зверь (сборник)
Фантастика:
фэнтези
рейтинг книги
Прокурор
Детективы:
прочие детективы
рейтинг книги
Воронцов. Перезагрузка
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
рейтинг книги
Над бездной
Любовные романы:
современные любовные романы
рейтинг книги
Кодекс Охотника. Книга XXVI
26. Кодекс Охотника
Фантастика:
попаданцы
рейтинг книги
Россия молодая
Полное издание в одном томе
Проза:
историческая проза
рейтинг книги
Николай Гоголь
Проза:
историческая проза
рейтинг книги
Эпоха Опустошителя. Том III
3. Вечное Ристалище
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Джек Потрошитель
Документальная литература:
публицистика
рейтинг книги
Братва
Братва
Детективы:
криминальные детективы
рейтинг книги
Я не царь. Книга XXIV
24. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
рейтинг книги
Эндимион. Восход Эндимиона
Гиперион
Фантастика:
научная фантастика
космическая фантастика
рейтинг книги
Симфонии
Поэзия:
поэзия
рейтинг книги