跳到主要内容

计算输入日期是星期几

阅读需 3 分钟

遇到一道题目,要求计算输入年份的元旦是星期几。之前有见过“将正整数n转换成文字形式输出星期几”,又或者是“输入一个年、月、日,输出它是这年的第几天”,却从未见过这样的题目。

将题目拓展下,计算输入的日期是星期几。想想就觉得难以下手。

① 确定某一年的某一天是星期几,作为标准;

② 输入的日期比确定的日期大了或小了几天并求余,算出星期几。

最后查到一个数学公式:基姆拉尔森计算公式

W = (D + 2* M + 3* (M + 1) \ 5 + Y + Y \ 4 - Y \ 100 + Y \ 400+1) % 7 ;

在公式中 W 为0~6的数字,D 表示日期中的日数,M 表示月份数,Y 表示年数。但需要把一月和二月看成是上一年的十三月和十四月,例:如果是 2004-1-10 则换算成:2003-13-10 来代入公式计算。(整理于百度百科)

数学真神奇。。

这是 C 语言的代码:写了一个 dayOfWeek() 函数进行调用。

include <stdio.h>
void dayOfWeek(int year, int month,int day);
main(){
int year, month, day;
scanf("%d %d %d",&year, &month, &day);
dayOfWeek(year,month,day);
}
void dayOfWeek(int year, int month,int day){
char* weeks[] = {"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
if(month==1||month==2){
year--;
month+=12;
}
int w = (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%7;
printf(weeks[w]);
}

此外,Java 的 Calendar 类中的 Day_OF_WEEK 方法可以直接获取日期星期:

import java.util.*;
public class test {
public static void main(String args[]) {
Calendar c=Calendar.getInstance();
String weekday[] = {"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
System.out.print(weekday[c.get(Calendar.DAY_OF_WEEK)-1]);
}
}

不过 C 语言中好像没有这样的内置方法。。哈哈,下面是 JavaScript 的写法,是不是更加简单了。

var str = "今天是星期" + "天一二三四五六".charAt(new Date("2017-11-19").getDay());
alert(str);
//new Date()会是当前日期,new Date("year-month-day")是指定日期。注意"-"符号。

这个问题应用数学公式和语言内置方法都可以解决。但需要注意不同编程语言的内置方法,星期的排序是按照星期天为第一位还是星期一为第一位,以及返回值范围,Java 返回值为 1(星期天)~7(星期一),JS 返回值为 0(周日)~6(周六)。

最后,我们真的是站在巨人的肩膀上前进。

暂时未加入评论功能,请在对应公众号文章下或 GitHub Issues下留言反馈。