week_day重置为0的作用是什么?
时间: 2024-03-31 20:39:10 浏览: 17
在计算星期几时,通常使用基姆拉尔森计算公式,该公式会得到一个数字表示星期几,星期一到星期日分别用数字1到7表示。如果这个数字超出了1到7的范围,我们需要将其重置为0,以便得到正确的星期几。重置为0的作用是为了避免在处理星期几的过程中出现错误。因为有些编程语言中,星期几是用0表示星期日,用1表示星期一,所以将超出1到7范围的数字重置为0也可以方便与这些编程语言中的星期几表示方式对接。
相关问题
select sum("day") from "days" group by "week_day" having "week_day" in ( select "week_day" from "days" group by "week_day", "day");
这是一条 SQL 查询语句,作用是计算每个工作日的总天数,但仅包括那些至少有一个日期也是工作日的日期。具体的解释如下:
- `select sum("day")`: 计算每个工作日的总天数。
- `from "days"`: 从"days"表中进行查询。
- `group by "week_day"`: 按照"week_day"字段进行分组,即将所有相同工作日的记录合并到一起。
- `having "week_day" in (select "week_day" from "days" group by "week_day", "day")`: 在分组后,仅保留那些至少有一个日期也是工作日的工作日。这里使用了子查询,先对"days"表按照"week_day"和"day"分组,然后再提取"week_day"字段,表示所有出现过的工作日。
总之,这条查询语句的目的是过滤出那些至少有一个日期也是工作日的工作日,并计算它们的总天数。
void print_calendar(int year, int month) { int days = get_month_days(year, month);//获取当前月份的天数 int first_day = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;//计算当年月份1月1日是星期一 for (int i = 1; i < month; i++) { first_day += get_month_days(year, i); } int week_day = (first_day + 1) % 7; // 1月1日是星期一 printf("日 一 二 三 四 五 六\n"); for (int i = 0; i < week_day; i++) { printf(" "); } for (int i = 1; i <= days; i++) { printf("%2d ", i); week_day++; if (week_day == 7) // 如果当前日期是星期六,换行 { printf("\n"); week_day = 0; } } printf("\n"); }每行什么意思
每行代码的意思如下:
1. 定义一个名为print_calendar的函数,该函数接受两个整型参数year和month,没有返回值。
2. 调用get_month_days函数,获取当前月份的天数。
3. 使用公式计算出当年月份1月1日是星期几,用first_day变量存储。
4. 使用for循环,累加计算出当前月份之前所有月份的天数。
5. 使用first_day和1的相对位置计算出当前月份第一天是星期几,用week_day变量存储。
6. 输出日历的表头,包括星期日到星期六。
7. 使用for循环,在第一天之前输出空格,以保证日历的对齐。
8. 使用for循环,输出当前月份的每一天。
9. 每输出一个日期,week_day加1,判断如果当前日期是星期六,就输出一个换行符,同时将week_day重置为0。
10. 输出完整的日历后,该函数执行完毕。