Как рассчитывается номер недели на основе даты?

Для системы, над которой я работаю, мне нужно иметь «двухнедельный номер», который работает так же, как стандартный номер недели, только каждые 14 дней вместо 7.

Другими словами, я ищу алгоритм, а не код, чтобы вычислить номер недели по дате, а также даты начала / окончания с учетом года и номера недели.

Вопрос возникает из-за того, что первая неделя любого года обычно не 1 января, а может быть даже в декабре прошлого года. Бывают годы, у которых из-за этого бывает 53 недели.

Например:

  • Неделя 1 2009 г. началась 2008 -12-29.
  • Таким образом, в 2009 году была 53-я неделя, с 28 декабря 2009 года по 03 января 2010 года.
  • Неделя 1 2010 началась 4 января 2010 г.

Как получены эти числа?


person Daniel Magliola    schedule 11.03.2013    source источник


Ответы (1)


Как получены эти числа?

Что ж, это зависит от того, какую систему вы используете, но я подозреваю, что вы выбрали номер недели ISO-8601, который определяется следующим образом:

2.2.10 номер календарной недели

порядковый номер, который идентифицирует календарную неделю в пределах своего календарного года в соответствии с правилом, согласно которому первая календарная неделя года - это та, которая включает первый четверг этого года, а последняя календарная неделя календарного года - это неделя, непосредственно предшествующая первая календарная неделя следующего календарного года

Имейте в виду, что неделя в ISO-8601 начинается в понедельник и заканчивается в воскресенье, поэтому еще один способ выразить правило первого четверга состоит в том, что первая неделя года - это первая неделя, содержащая как минимум четыре дня нового года.

Другой важный момент заключается в том, что когда вы выражаете значения с использованием недели за годом, вам также необходимо использовать сам год недели, а не не нормальный год. Итак, воскресенье, 3 января 2010 года, можно выразить как 53-я неделя, 2009-я неделя, день недели воскресенье. Слишком легко использовать неправильный тип года и в конце декабря - начале января испортить значения.

person Jon Skeet    schedule 11.03.2013
comment
Круто, это имеет смысл ... Я вроде как надеялся, что это будет как-то определено на основе эпохи, а затем мы продолжим добавлять недели. Это намного стабильнее на годовой основе, чем я ожидал ... Есть идеи, как перенести это на двухнедельные числа, где у меня может получиться странное начало года? Спасибо!! - person Daniel Magliola; 11.03.2013
comment
@DanielMagliola: Нет, вам нужно определить это для себя - или, скорее, спросить у того, кто вам дал эту задачу, конкретный набор требований. - person Jon Skeet; 11.03.2013
comment
Одна мысль о двухнедельном исчислении заключается в том, что вы должны определять две недели по-разному в зависимости от того, какой календарь вы используете. В этом случае, с календарём на неделю и год, две недели действительно легко вычислить. Сложность заключается в том, что он не точно соответствует нормальному календарю в отношении границ года (поскольку границы года различаются в обычном календаре и календаре недельного года) - person cdeszaq; 06.03.2014