Порядковая дата

редактировать
Сегодняшняя дата (UTC ), выраженная в соответствии с ISO 8601
Дата2020 -10-24
Порядковая дата 2020-298

Порядковая дата - это календарная дата, обычно состоящая из года и дня в году в диапазоне от 1 и 366 (начиная с 1 января), хотя год иногда может быть опущен. Два числа могут быть отформатированы как ГГГГ-ДДД, чтобы соответствовать формату ISO 8601 порядковой даты.

Содержание

  • 1 Расчет
    • 1.1 По модулю 7
  • 2 Таблица
  • 3 Месяц – день
  • 4 См. Также
  • 5 Внешние ссылки

Расчет

Расчет порядковой даты в течение года является частью вычисления порядковой даты в течение многих лет от контрольной даты, например юлианской даты. Это также часть вычисления дня недели, хотя для этой цели могут быть сделаны упрощения по модулю 7.

Для этих целей удобно считать январь и февраль как 13 и 14 месяц предыдущего года по двум причинам: краткость февраля и его непостоянная продолжительность. В этом случае дата, отсчитываемая от 1 марта, будет иметь вид

⌊ 30,6 (m + 1) ⌋ + d - 122 {\ displaystyle \ lfloor 30,6 (m + 1) \ rfloor + d-122}{\ displaystyle \ lfloor 30,6 (m + 1) \ rfloor + d-122}

, что также можно записать

⌊ 30,6 м - 91,4 ⌋ + d {\ displaystyle \ left \ lfloor 30,6m-91,4 \ right \ rfloor + d}{\ displaystyle \ left \ lfloor 30,6m-91,4 \ right \ rfloor + d}

или

⌊ 30,6 (м - 3) + 0,4 ⌋ + d {\ displaystyle \ left \ lfloor 30,6 (m-3) +0,4 \ right \ rfloor + d}{\ displaystyle \ left \ lfloor 30,6 (m-3) +0,4 \ right \ rfloor + d}

, где m - номер месяца, а d - дата. ⌊ x ⌋ {\ displaystyle \ left \ lfloor x \ right \ rfloor}\ left \ lfloor x \ right \ rfloor - это функция пола.

Формула отражает тот факт, что любые пять последовательных месяцев в диапазоне от марта до Январь имеет общую продолжительность 153 дня из-за фиксированного шаблона 31–30–31–30–31, повторяющегося дважды.

"Судный день "свойства:

для m = 2 n {\ displaystyle m = 2n}m = 2n и d = m {\ displaystyle d = m }{\ displaystyle d = m} получаем

⌊ 63,2 n - 91,4 ⌋ {\ displaystyle \ left \ lfloor 63.2n-91.4 \ right \ rfloor}{\ displaystyle \ left \ lfloor 63.2n-91.4 \ right \ rfloor}

, что дает последовательные разницы в 63 (9 недель) для n = 2, 3, 4, 5 и 6, т.е. между 4/4, 6/6, 8/8, 10/10 и 12/12.

Для m = 2 n + 1 {\ displaystyle m = 2n + 1}{ \ displaystyle m = 2n + 1} и d = m + 4 {\ displaystyle d = m + 4}{\ displaystyle d = m + 4} получаем

⌊ 63,2 n - 56 + 0,2 ⌋ {\ displaystyle \ left \ lfloor 63.2n-56 + 0,2 \ right \ rfloor}{\ displaystyle \ left \ lfloor 63.2n-56 + 0.2 \ right \ rfloor}

и с заменой m и d

⌊ 63,2 n - 56 + 119 - 0,4 ⌋ {\ displaystyle \ left \ lfloor 63,2 n-56 + 119-0.4 \ right \ rfloor}{\ displaystyle \ левый \ lfloor 63.2n-56 + 119-0.4 \ right \ rfloor}

дает разницу в 119 (17 недель) для n = 2 (разница между 5/9 и 9/5), а также для n = 3 (разница между 7 / 11 и 11/7).

Порядковая дата с 1 января:

  • для января: d
  • для февраля: d + 31
  • для другого месяцев: порядковая дата от 1 марта плюс 59, или 60 в високосном году r

или, что эквивалентно, порядковая дата с 1 марта предыдущего года (для которого может использоваться формула выше) минус 306.

Modulo 7

Снова считая январь и февраль как 13 и 14 месяц предыдущего года, дата отсчитывается от 1 марта по модулю 7, равному

⌊ 2,6 м - 0,4 ⌋ + d {\ displaystyle \ left \ lfloor 2.6m-0.4 \ right \ rfloor + d}{\ displaystyle \ left \ lfloor 2.6m-0.4 \ right \ rfloor + d}

, где m - номер месяца, а d - число.

Вычисление может быть выполнено с 1 января математически без операторов if, если мы воспользуемся преимуществами алгебраической логики min и max. MAX равно 1/2 ∗ (a + b + | a - b |) {\ displaystyle 1/2 * (a + b + \ left | ab \ right |)}{\ displaystyle 1/2 * (a + b + \ left | a- b \ right |)} . MIN равно 1/2 ∗ (a + b - | a - b |) {\ displaystyle 1/2 * (a + b- \ left | ab \ right |)}{\ displaystyle 1/2 * (a + b- \ влево | ab \ справа |)} .. при условии, что месяц (m), день (d) и год (y). (MAX (0, MIN (1, m - 1)) ∗ 31) + {\ displaystyle (MAX (0, MIN (1, m-1)) * 31) +}{\ displaystyle ( МАКС (0, МИН (1, m-1)) * 31) +} // если январь - полный месяц. ( MAX (0, MIN (1, m - 2)) ∗ 28) + {\ displaystyle (MAX (0, MIN (1, m-2)) * 28) +}{\ displaystyle (MAX ( 0, MIN (1, m-2)) * 28) +} // если Feb равно полный месяц. (MAX (0, MIN (1, m - 3)) ∗ 31) + {\ displaystyle (MAX (0, MIN (1, m-3)) * 31) +}{\ displaystyle (MAX (0, MIN (1, m-3)) * 31) +} // если март полный месяц. (MAX (0, MIN (1, m - 4)) ∗ 30) + {\ displaystyle (MAX (0, MIN (1, m -4)) * 30) +}{\ displaystyle (MAX (0, MIN (1, m-4)) * 30) +} // если апр - полный месяц. (MAX (0, MIN (1, m - 5)) ∗ 31) + {\ displaystyle (MAX (0, MIN (1, m-5)) * 31) +}{\ displaystyle (MAX (0, MIN (1, m-5)) * 31) +} // если май полный месяц. (MAX (0, MIN (1, m - 6)) ∗ 30) + {\ displaystyle (MAX (0, MIN (1, m-6)) * 30) +}{\ displaystyle (MAX (0, MIN (1, m-6)) * 30) +} // если июнь полный месяц. (MAX (0, MIN (1, m - 7)) ∗ 31) + {\ displaystyle (MAX (0, MIN (1, m-7))) * 31) +}{\ displaystyle (MAX (0, MIN (1, m-7)) * 31) +} // если июль - полный месяц. (MAX (0, MIN (1, m - 8)) ∗ 31) + {\ displaystyle (MAX (0, MIN (1, m-8)) * 31) +}{\ displaystyle (MAX (0, MIN (1, m-8)) * 31) +} // если август - полный месяц. (MAX (0, MIN (1, m - 9)) ∗ 30) + {\ displaystyle (MAX (0, MIN (1, m-9)) * 30) +}{\ displaystyle (МАКС (0; MIN (1; m-9)) * 30) +} // если сентябрь полный месяц. (MAX ( 0, MIN (1, m - 10)) ∗ 31) + {\ displaystyle (MAX (0, MIN (1, m-10)) * 31) +}{\ displaystyle (MAX (0, MIN (1, м-10)) * 31) +} // если Oct - полное месяц. (MAX (0, MIN (1, m - 11)) ∗ 30) + {\ displaystyle (MAX (0, MIN (1, m-11))) * 30) +}{\ displaystyle (MAX (0, MIN (1, m-11)) * 30) +} // если ноя - полный месяц. d + {\ displaystyle d +}{\ displaystyle d +} // дни текущего месяца. (((INT ((y) / 4) - ЦЕЛОЕ ((y) / 100) + ЦЕЛОЕ ((y) / 400)) {\ displaystyle (((INT ((y) / 4) -INT ((y) / 100) + INT ((y) / 400))}{\ displaystyle (((INT ((y) / 4) -INT ((y) / 100) + INT ((y) / 400))} // прыжок логика года. - (INT ((y - 1) / 4) - INT ((y - 1) / 100) + INT ((y - 1) / 400))) ∗ MAX (0, MIN (1, м - 2))) {\ Displaystyle - (ЦЕЛОЕ ((y-1) / 4) -INT ((y-1) / 100) + ЦЕЛЫЕ ((y-1) / 400))) * МАКС (0, MIN (1, m-2)))}{\ displaystyle - (INT ((y-1) / 4) -INT ((y-1) / 100) + INT ((y-1) / 400))) * MAX (0, MIN (1, m-2)))} // считать високосный год, только если дата>= 3-й месяц // логика високосного года

пример 24 августа 2016 г. равно 31 + 28 + 31 + 30 + 31 + 30 + 31 + 0 + 0 + 0 + 0 + 24 + 1 {\ displaystyle 31 + 28 + 31 + 30 + 31 + 30 + 31 + 0 + 0 + 0 + 0 + 24 + 1}{\ displaystyle 31 + 28 + 31 + 30 + 31 + 30 + 31 + 0 + 0 + 0 + 0 + 24 + 1}

Таблица

До дня13. января14. февраля3. марта4. апреля5. мая6. июня7. июля8. Авг9. Сен10. Окт11. Ноябрь12. Декi
Добавить03159901201511812122432733043343
Високосные годы03160911211521822132442743053352
Алгоритм30 (м - 1) + ⌊ 0,6 (м + 1) ⌋ - я {\ displaystyle 30 (m-1) + \ left \ lfloor 0,6 (m + 1) \ right \ rfloor -i}{\ displaystyle 30 (m-1) + \ left \ lfloor 0,6 ( m + 1) \ right \ rfloor -i}

Например, порядковая дата 15 апреля - 90 + 15 = 105 в обычный год и 91 + 15 = 106 в год високосный год.

Месяц – день

Число месяца и числа определяется как

m = ⌊ od / 30 ⌋ + 1 {\ displaystyle m = \ left \ lfloor od / 30 \ right \ rfloor +1}{\ displaystyle m = \ left \ lfloor od / 30 \ right \ rfloor +1} .
d = mod (od, 30) + i - ⌊ 0,6 (m + 1) ⌋ {\ displaystyle d = mod (od, 30) + i- \ left \ lfloor 0.6 ( m + 1) \ right \ rfloor}{\ displaystyle d = mod (od, 30) + i- \ left \ lfloor 0,6 (m + 1) \ right \ rfloor}

термин mod (od, 30) {\ displaystyle mod (od, 30)}{\ displaystyle mod (od, 30)} также можно заменить на od - 30 (m - 1) {\ displaystyle od-30 (m-1)}{\ displaystyle od-30 (m-1)} с od {\ displaystyle od}{\ displaystyle od} порядковой датой.

  • День 100 обычного года:
m = ⌊ 100/30 ⌋ + 1 = 4 {\ displaystyle m = \ left \ lfloor 100/30 \ right \ rfloor + 1 = 4}{\ displaystyle m = \ left \ lfloor 100/30 \ right \ rfloor + 1 = 4}
d = mod (100, 30) + 3 - ⌊ 0,6 (4 + 1) ⌋ = 10 + 3 - 3 = 10 {\ displaystyle d = mod (100,30) + 3- \ left \ lfloor 0,6 (4 + 1) \ right \ rfloor = 10 + 3-3 = 10}{\ displaystyle d = mod (100,30) + 3- \ left \ lfloor 0,6 (4+ 1) \ right \ rfloor = 10 + 3-3 = 10}
10 апреля.
  • День 200 обычного года:
m = ⌊ 200/30 ⌋ + 1 = 7 {\ displaystyle m = \ left \ lfloor 200/30 \ right \ rfloor + 1 = 7}{\ displaystyle m = \ left \ lfloor 200 / 30 \ right \ rfloor + 1 = 7}
d = mod (200, 30) + 3 - ⌊ 0,6 (7 + 1) ⌋ = 20 + 3 - 4 = 19 {\ displaystyle d = mod ( 200,30) + 3- \ left \ lfloor 0,6 (7 + 1) \ right \ rfloor = 20 + 3-4 = 19}{\ displaystyle d = mod (200,30) + 3- \ левый \ lfloor 0,6 (7 + 1) \ right \ rfloor = 20 + 3-4 = 19}
19 июля.
  • 300-й день високосного года:
м Знак равно ⌊ 300/30 ⌋ + 1 = 11 {\ displaystyle m = \ left \ lfloor 300/30 \ right \ rfloor + 1 = 11}{\ displaystyle m = \ left \ lfloor 300/30 \ right \ rfloor + 1 = 11}
d = mod (300, 30) + 2 - ⌊ 0,6 (11 + 1) ⌋ знак равно 0 + 2-7 = - 5 {\ displaystyle d = mod (300,30) + 2- \ left \ lfloor 0,6 (11 + 1) \ right \ rfloor = 0 + 2-7 = -5}{\ displaystyle d = mod (300,30) + 2- \ left \ lfloor 0.6 (11 + 1) \ right \ rfloor = 0 + 2-7 = -5}
ноябрь -5 = 26 октября (31-5).

См. Также

Внешние ссылки

Последняя правка сделана 2021-06-01 14:14:01
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте