Как рассчитать день недели ISO, используя порядковый день и день недели 1 января? - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно рассчитать день недели ISO для конкретной даты.В настоящее время у меня есть функции, которые вычисляют порядковый день, а также функцию, которая вычисляет день 1 января каждого года, однако теперь мне нужна функция, которая будет вычислять день недели ISO для любой даты.

Я должен сделать это с помощью порядкового дня, дня недели и арифметики по модулю 7, но я не совсем уверен, как это сделать, например, для даты пятница 26 сентября 2008 года, моего порядкового дня.должно быть 270 (что это), и мой номер дня недели должен быть 5 (пятница), что это не так.Я думаю, что я должен объединить два с арифметикой по модулю 7, но я не совсем уверен, как.

Я пытался сделать 270% 7, который дал мне ответ 4, но это должно быть 5.Я не совсем уверен, как я должен соединить два значения (если мне даже нужно)

Мой код для двух функций:

int day_of_the_week(int year)
{
int week_day;
week_day = ((1 + 5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year 
- 1) % 400) ) % 7);
if (week_day == 0) {
    week_day = 7;
}
return 0;
}


int calculate_ordinal_day(int day, int month, int year, int isyearleap) {
int ordinal_day;

if (month == 1) {
    return day;
}
if (month == 2) {
    return day + 31;
}

ordinal_day = myFloor(30.6 * month - 91.4) + day;
if (isyearleap == 1) {
    return ordinal_day + 60;
}
return ordinal_day + 59;
}

1 Ответ

0 голосов
/ 25 октября 2018

Почему вы думаете, что Friday должно быть 5?Вы делаете по модулю 7, поэтому возможные результаты: 0, 1, 2, 3, 4, 5 и 6.0 - первый первый день, Monday, 6 - последний день, Sunday.Friday правильно пронумерован как 4.Если вы хотите, чтобы Monday было 1 и Sunday было 7, просто добавьте 1 к результату.

...