继续昨天的datetime相关练习
2.顺子日期(蓝桥2096)
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期?
import datetime
arr = datetime.date(2022, 1, 1)
brr = datetime.date(2022, 12, 31)
sss = ["012", "123", "234", "345", "456", "567", "678", "789"]
count = 0
while arr <= brr:
date_now = arr.strftime("%Y%m%d")
for i in sss:
if i in date_now:
count += 1
break
arr += datetime.timedelta(days=1)
print(count)
3.第十五届蓝桥杯 Python B 组省赛试题D:神奇闹钟
测评链接:https://www.dotcpp.com/oj/train/1120/
题目描述
小蓝发现了一个神奇的闹钟,从纪元时间(1970 年 1 月 1 日 00:00:00 )开始,每经过 x 分钟,这个闹钟便会触发一次闹铃(纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。
对于给出的任意一个格式为 yyyy-MM-dd HH:mm:ss 的时间,小蓝想要知道在这个时间点之前(包含这个时间点)的最近的一次闹铃时间是哪个时间?
注意,你不必考虑时区问题。
输入格式
输入的第一行包含一个整数 T,表示每次输入包含 T 组数据。
接下来依次描述 T 组数据。
每组数据一行,包含一个时间(格式为 yyyy-MM-dd HH:mm:ss )和一个整数 x ,其中 x 表示闹铃时间间隔(单位为分钟)。
输出格式
输出 T 行,每行包含一个时间(格式为 yyyy-MM-dd HH:mm:ss ),依次表示每组数据的答案。
样例输入
2
2016-09-07 18:24:33 10
2037-01-05 01:40:43 30
样例输出
2016-09-07 18:20:00
2037-01-05 01:30:00
提示
【评测用例规模与约定】
对于所有评测用例,1 ≤ T ≤ 10,1 ≤ x ≤ 1000,保证所有的时间格式都是合法的。
上一篇博客datetime写的不够全
datetime.fromisoformat 可以用于将符合 ISO 8601 格式的字符串解析为 datetime 对象
解题代码
import datetime
n = int(input())
arr = [input() for _ in range(n)]
date_0 = datetime.datetime.fromisoformat('1970-01-01 00:00:00')
for i in range(n):
date_1 = datetime.datetime.fromisoformat(arr[i][0:19])
time_1 = int(arr[i][20:])
# 计算间隔(分钟)
kkk = int((date_1 - date_0).total_seconds()) // 60
# 去除余数
kkk -= kkk % time_1
print(date_0 + datetime.timedelta(minutes=kkk))