今天在朋友圈里看到很多人发圈说今天是个稀罕的对称日,很好奇这种日子到底有多特殊,于是下班后回家写了段代码算了一下。原来:从公元1年1月1日开始算,到9999年12月31日,一共有366个对称日,平均间隔27.3年。今天是第83个对称日,下一次是2030年03月02日。两个对称日最短间隔669天(约1.8年),是 0100-01-10 到 0111-11-10。最长间隔711.5年,是从 2090-09-22 到 3001-10-03。

python程序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import datetime
DATE_FMT1 = '%Y%m%d'
DATE_FMT2 = '%Y-%m-%d'

if __name__ == '__main__':
    date = datetime.date(1, 1, 1)
    max_date = datetime.date(9999, 12, 31)
    counter = 0
    dt_days = 0

    min_dt_days = {'days': 9999 * 366}
    max_dt_days = {'days': 0}

    while True:
        date += datetime.timedelta(days=1)
        dt_days += 1
        date_str = date.strftime(DATE_FMT1)

        is_symmetry = True
        for i in range(0, 4):
            if date_str[i] != date_str[7 - i]:
                is_symmetry = False
                break

        if is_symmetry:
            counter += 1
            start_day_str = (date - datetime.timedelta(days=dt_days)).strftime(DATE_FMT2)

            if dt_days > max_dt_days['days']:
                max_dt_days = {'days': dt_days, 'start': start_day_str, 'end': date.strftime(DATE_FMT2)}

            if dt_days < min_dt_days['days']:
                min_dt_days = {'days': dt_days, 'start': start_day_str, 'end': date.strftime(DATE_FMT2)}

            dt_days = 0
            print("%d %s" % (counter, date_str))

        if date >= max_date:
            break

    print("从 0001-01-01 到 9999-12-31 这段时间:")
    print("一共有 %d 个对称日。" % counter)
    print("两个对称日的平均间隔为 %.1f 年" % (9999.0 / counter))
    print("2021-12-02 是第 83 次对称日,下一次是:2030-03-02")

    print("最短的两个对称日相隔 %d 天(约 %.1f 年),从 %s%s"
          % (min_dt_days['days'], (min_dt_days['days'] / 365.0), min_dt_days['start'], min_dt_days['end']))

    print("最长的两个对称日相隔 %d 天(约 %.1f 年),从 %s%s"
          % (max_dt_days['days'], (max_dt_days['days'] / 365.0), max_dt_days['start'], max_dt_days['end']))

计算结果

1
2
3
4
5
6
从 0001-01-01 到 9999-12-31 这段时间:
一共有 366 个对称日。
两个对称日的平均间隔为 27.3 年
20211202是第83次对称日,下一次是:20300302
最短的两个对称日相隔 669 天(约 1.8 年),从 0110-01-10 到 0111-11-10
最长的两个对称日相隔 259698 天(约 711.5 年),从 2290-09-22 到 3001-10-03