我需要计算特定日期的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;
}
答案 0 :(得分:1)
您为什么认为Friday
应该是5
?您正在对7
做模,所以可能的结果是0
,1
,2
,3
,4
,{{1} }和5
。 6
是第一天0
,Monday
是最后一天6
。 Sunday
正确地编号为Friday
。如果您想将4
设置为Monday
,将1
设置为Sunday
,只需将7
添加到结果中即可。