首页 > 技术文章 > 一个小问题:给一个日期,推算出当天是星期几

recycer 2020-03-10 20:40 原文

首先是一个利用公式计算的通用方法:

  • 蔡勒(Zeller)公式

其中:
c:已经过的世纪数(比如2020年已经过了20个世纪);
y:是本世纪内的年份(如四位数年的后两位);
m:月;
d:日;
w:星期几,取值范围0-6,其中0是星期日。

int year = 2020;
int month = 4;
int dayOfMonth = 3;

int c = year / 100;
int y = year % 100;
int m = month;
int d = dayOfMonth;

int weekday = ((c / 4) - 2 * c + y + (y / 4) + (13 * (m + 1) / 5) + d - 1) % 7;
System.out.println(weekday);

此版本蔡勒公式计算的日期若在1582年10月4日之前,则需要小小的变化:把-1变成+2
此外蔡勒公式有一些变种,对应的公式和时间节点都有变化。若感兴趣可以自行查资料

另外,Java中有一些专门的类可以处理这个问题:

  • LocalDate类和DayOfWeek
int year = 2020;
int month = 4;
int dayOfMonth = 3;

LocalDate date = LocalDate.of(year, month, dayOfMonth);
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();
System.out.println(value);

这里星期数value取值范围1-7,其中7是星期天

推荐阅读