Совет дня №3
Будьте осторожны с функцией “получить номер недели”. Независимо от языка и платформы, с ней легко прострелить ногу. И когда это случается? Конечно, на стыке годов в предновогоднюю неделю. Лучшее время, чтобы чинить баг.
Дело в том, что номер недели бывает разный. Есть обычный, когда день 2025-12-31 – это неделя 53. А есть ISO-шный, когда 2025-12-31 – это неделя 1. Скажем, в Postgres все способы извлечь неделю являются ISO:
select extract(week from '2025-12-31'::date);
-- 1
select to_char('2025-12-31'::date, 'IW');
-- 01
В Джаве больше контроля: есть поля weekOfYear и weekOfWeekBasedYear:
(.get (java.time.LocalDate/parse "2025-12-31")
(.weekOfWeekBasedYear java.time.temporal.WeekFields/ISO))
;; 1
(.get (java.time.LocalDate/parse "2025-12-31")
(.weekOfYear java.time.temporal.WeekFields/ISO))
;; 53
Разумеется, их легко перепутать, и файлы уйдут не туда.
Кстати, в корпоративной программе учета часов в декабре нет недели 53. Если работал 29 и 30 декабря, добавляй часы вручную к неделе 52. Подозреваю, что дело в ISO-шном номере 1.
Поздравляю вас с еще одним поводом не расслаблять булки перед праздником.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter