Делал проект, придумал формат Week Time Clock. Суть проста, формат хранит текущий день недели, час и минуту в виде одного целого числа. Максимальное значение 10079 - Вс. 23:59. Собственно, набор макросов как раз позволяет преобразовывать из одного этого числа в три отдельных, где 0 - понедельник, 1 - вторник и т.п.. Дата зациклена, то есть, после последней минуты воскресенья наступает Пн. 00:00. Для обеспечения всех этих условностей в комплекте идут макросы типа wtcADD и wtcSUB. Также мне было нужно иметь возможность оставить дату неуказанной, для этого я использую число 10080, так как оно больше допустимого на 1, строго говоря, можно использовать любое число, больше 10079, проверку на корректность даты делает макрос corrWTC. Конечно, там многое сделано не идеально, и есть смысл дорабатывать, но все опробовано на реальном железе и вполне успешно работает.
Для тех, кому не ясно - зачем нужен такой формат - приведу пример:
У нас есть какой-то временной интервал, скажем от Пн. 00:20 до Пн. 06:10. Причем этот интервал задает пользователь. Нам же нужно указать отрицательное или положительное смещение, относительно указанного времени, скажем, на 1 час назад отодвинуть нижнюю границу, то есть - 60 минут. Тогда у нас должен получиться уже интервал Вс. 23:20 - Пн. 06:10. Чтобы автоматизировать обработку всех этих переходов между днями и удобно использовать данные макросы.
P.S.: Макрос toWTCDay вычисляет день недели (от 0 до 6), получая на входе год, месяц и число, так что вполне может быть использован отдельно от остальных.




Ответить с цитированием