首先是一个利用公式计算的通用方法:
- 蔡勒(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是星期天