Программирование на языке 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
Пер. О. Румер. — Прим. ред.
Империум. Антология к 400-летию Дома Романовых
Фантастика:
фэнтези
социально-философская фантастика
героическая фантастика
научная фантастика
боевая фантастика
альтернативная история
рейтинг книги
Буря Жнеца
7. «Малазанская империя»
Фантастика:
фэнтези
рейтинг книги
Философия Науки. Хрестоматия
Научно-образовательная:
философия
рейтинг книги
Противостояние. Том II
Фантастика:
социально-философская фантастика
научная фантастика
ужасы и мистика
рейтинг книги
7 историй для девочек
Детские:
детская проза
рейтинг книги
Я уже князь. Книга XIX
19. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Имаджика
7. Книга-загадка, книга-мистика
Фантастика:
фэнтези
рейтинг книги
Кир Булычев. Собрание сочинений в 18 томах. Т.9
Собрания сочинений
Фантастика:
альтернативная история
рейтинг книги
Геймер. Тетралогия
Фантастика:
альтернативная история
рейтинг книги
Офицер
1. Офицер
Фантастика:
боевая фантастика
рейтинг книги
Сказки и истории
Проза:
классическая проза
рейтинг книги
Эрсус. Инферно
3. Стезя Эрсуса
Фантастика:
фэнтези
рейтинг книги
Посланник
2. Страж
Фантастика:
научная фантастика
космическая фантастика
рейтинг книги