前两天看到公众号推送的一篇文章,说是2020年有五个神奇的周六:2020年4月4号是周六,6月6号是周六,8月8号是周六,10月10号是周六,12月12号也是周六。
这个确实挺有意思,我就写个简单的demo去测试了一下”五个神奇的周六“是否罕见,下面是测试代码(只为图方便,用了Date已经失效的方法,仅供参考)
//初始年份1900+120=2020,终止年份=2050
for (int year = 120; year < 151; year++) {
List<String> list = new ArrayList<>();
for (int time = 0; time < 12; time++) {
//Deprecated method:实际年份=year+1900
Date date = new Date(year, time, time + 1);
Date today = new Date(120, 0, 5);
long dif = DateUtil.timeDifference(date, today) / (24 * 3600 * 1000);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, (int) dif);
//DAY_OF_WEEK周日=1,所以周六=7
if (cal.get(Calendar.DAY_OF_WEEK) == 7) {
list.add(date.toString());
}
}
//输出一年内神奇周六大于四次的日期数据
if (list.size() > 4) {
System.out.println(list);
}
}
输出:
[Sat Apr 04 00:00:00 CST 2020, Sat Jun 06 00:00:00 CST 2020, Sat Aug 08 00:00:00 CST 2020, Sat Oct 10 00:00:00 CST 2020, Sat Dec 12 00:00:00 CST 2020]
[Sat Apr 04 00:00:00 CST 2026, Sat Jun 06 00:00:00 CST 2026, Sat Aug 08 00:00:00 CST 2026, Sat Oct 10 00:00:00 CST 2026, Sat Dec 12 00:00:00 CST 2026]
[Sat Apr 04 00:00:00 CST 2037, Sat Jun 06 00:00:00 CST 2037, Sat Aug 08 00:00:00 CST 2037, Sat Oct 10 00:00:00 CST 2037, Sat Dec 12 00:00:00 CST 2037]
[Sat Apr 04 00:00:00 CST 2043, Sat Jun 06 00:00:00 CST 2043, Sat Aug 08 00:00:00 CST 2043, Sat Oct 10 00:00:00 CST 2043, Sat Dec 12 00:00:00 CST 2043]
[Sat Apr 04 00:00:00 CST 2048, Sat Jun 06 00:00:00 CST 2048, Sat Aug 08 00:00:00 CST 2048, Sat Oct 10 00:00:00 CST 2048, Sat Dec 12 00:00:00 CST 2048]
从结果我们看到,从2020年至2050年之间,2026、2037、2043、2048年都有五个神奇的周六,并且月份都是一样的。看来,五个神奇的周六并不稀罕嘛。
然后好奇的我又去计算了一下未来30年内神奇周日的数据,发现也有五个年份有五个神奇周日。我掐指一算,明年开年肯定有公众号推送《2021年有五个神奇的周日》。日期数据如下:
[Sun Apr 04 00:00:00 CST 2021, Sun Jun 06 00:00:00 CST 2021, Sun Aug 08 00:00:00 CST 2021, Sun Oct 10 00:00:00 CST 2021, Sun Dec 12 00:00:00 CST 2021]
[Sun Apr 04 00:00:00 CST 2027, Sun Jun 06 00:00:00 CST 2027, Sun Aug 08 00:00:00 CST 2027, Sun Oct 10 00:00:00 CST 2027, Sun Dec 12 00:00:00 CST 2027]
[Sun Apr 04 00:00:00 CST 2032, Sun Jun 06 00:00:00 CST 2032, Sun Aug 08 00:00:00 CST 2032, Sun Oct 10 00:00:00 CST 2032, Sun Dec 12 00:00:00 CST 2032]
[Sun Apr 04 00:00:00 CST 2038, Sun Jun 06 00:00:00 CST 2038, Sun Aug 08 00:00:00 CST 2038, Sun Oct 10 00:00:00 CST 2038, Sun Dec 12 00:00:00 CST 2038]
[Sun Apr 04 00:00:00 CST 2049, Sun Jun 06 00:00:00 CST 2049, Sun Aug 08 00:00:00 CST 2049, Sun Oct 10 00:00:00 CST 2049, Sun Dec 12 00:00:00 CST 2049]