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']))
|