如何使用1月1日的序号和星期几来计算ISO星期几?

时间:2018-10-25 13:15:40

标签: c date math iso weekday

我需要计算特定日期的ISO周日。目前,我已经有了可以计算顺序日期的函数,以及可以计算每年1月1日的日期的函数,但是,我现在需要一个可以计算任何日期的ISO周日的函数。

我应该使用序数日,星期几和模7算术来执行此操作,但是我不确定如何执行此操作,例如,对于2008年9月26日(星期五),我的序数日应为是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 :(得分:1)

您为什么认为Friday应该是5?您正在对7做模,所以可能的结果是01234,{{1} }和56是第一天0Monday是最后一天6Sunday正确地编号为Friday。如果您想将4设置为Monday,将1设置为Sunday,只需将7添加到结果中即可。