先放上两种做法

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
#思路是对年代进行迭代,进行回文操作后查看日期是否合法
from datetime import datetime

def judge(y,m,d):
try:
datetime(y,m,d)
return True
except ValueError:
return False

t1 = input()
t2 = input()
start = int(t1[:4])
end = int(t2[:4])
cnt = 0
for y in range(start,end+1):
y_str = f'{y:04d}'
m = int(y_str[::-1][:2])
d = int(y_str[::-1][2:])
if judge(y,m,d):
res = f'{y:04d}{m:02d}{d:02d}'
if t1 <= res <= t2:
cnt += 1

print(cnt)

暴力遍历:过不了全部样例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from datetime import datetime,timedelta

def check(a):
return a == a[::-1]

t1 = datetime.strptime(input(),'%Y%m%d')
t2 = datetime.strptime(input(),'%Y%m%d')
current = t1
cnt = 0
while current <= t2:
tmp = datetime.strftime(current,'%Y%m%d')
if check(tmp):
cnt += 1
current += timedelta(days=1)

print(cnt)

datetime

表示日期和时间
导入:from datetime import datetime

需要注意的是该类名与模块名称相同

创建对象:

1
2
3
4
5
6
7
8
9
10
# 使用指定日期和时间 
dt = datetime(2023, 10, 5, 14, 30, 0)
print(dt) # 输出:2023-10-05 14:30:00

datetime(year=eg_year, month=eg_month, day=eg_day)

# strptime方法,解析字符串 string parse time的意思
date_str = "2023-10-05 14:30:00"
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(dt) # 输出:2023-10-05 14:30:00

获取部分:

1
2
3
4
5
6
7
#输出的类型为int,会破坏掉原来的0位补充
print(dt.year) # 输出:2023
print(dt.month) # 输出:10
print(dt.day) # 输出:5
print(dt.hour) # 输出:14
print(dt.minute) # 输出:30
print(dt.second) # 输出:0

格式化为字符串

1
2
formatted = dt.strftime("%Y-%m-%d %H:%M:%S")#string format time的意思
print(formatted) # 输出:2023-10-05 14:30:00

tips:strftimestrptime,都使用了一一匹配的原则

timedelta

更好的理解为时间量,常用于时间的加减与迭代
而且两个datetime对象相减后就是timedelta对象

1
2
3
4
5
6
7
8
9
from datetime import timedelta
# 参数有days,hours,minutes...
# 加一天
dt_new = dt + timedelta(days=1)
print(dt_new) # 输出:2023-10-06 14:30:00

# 减一小时
dt_new = dt - timedelta(hours=1)
print(dt_new) # 输出:2023-10-05 13:30:00

其他

date 和 time 类, 已经被datetime的功能所涵盖