Вне мира за пределами США больше, чем внутри - и ISO 8601, вероятно, используется более широко за пределами США, чем внутри.
Первоначальное утверждение «год имеет 52 недели» верно только частично, как вы уже нашли. Что касается недель ISO, вы можете закончить с 53 неделей, как отмечено в Википедии. Вы можете иметь до трех дней в году N + 1 на неделе 52 года N или на неделе 53 года N. Вы также можете иметь до трех дней года N-1 на неделе 1 года N. И вам нужно определить как «неделя-год» ISO, так и «неделя» - потому что, когда григорианский календарный год равен N, недельный год ISO может быть годом N-1 или N + 1 (в зависимости от того, какой конец год, с которым вы работаете). Вот почему, например, в strftime () есть отдельные спецификаторы формата («% Y», «% y», «% g», «% G») (но учтите, что стандарт POSIX считает, что дни до первого понедельника января относятся к неделе 0 текущего года, а не к неделе 52 или 53 предыдущего года).
Кажется, нет надежного «американского стандарта» для «недели». Вы получите разные результаты в зависимости от программного обеспечения, которое вы используете. Если вы посмотрите на определение недели Oracle , то первые семь дней года - это неделя 1; в конце года у вас 1 или 2 дня на неделе 53.
См. Также SO 274861 для реализации кода недели ISO. Даже если вы не пишете код на языке, алгоритм должен быть понятен.