Skip to content

time

from datetime import date, datetime, timedelta
# 计算两个日期之间的天数
start_date = date(2025, 4, 1)
end_date = date(2025, 4, 17)
delta = end_date - start_date
print(delta) # 输出: 16 days, 0:00:00
print(delta.days) # 输出: 16

2000年的1月1日, 是那一年的第1天

那么, 2000年5月4日, 是那一年的第几天

from datetime import date
print((date(2000, 5, 4)-date(2000, 1, 1)).days+1) # 输出: 125

整个20世纪 (1901-01-01 ~ 2000-12-31) 中, 星期一的数量

from datetime import date, timedelta
t0 = date(1901, 1, 1)
t1 = date(2000, 12, 31)
res = 0
while t0 <= t1:
if t0.weekday() == 0: # 0=Monday, 1=Tuesday, ..., 6=Sunday
res += 1
t0 += timedelta(days=1)
print(res) # 输出: 5217

小蓝特别喜欢2, 今年是公元2020年, 他特别高校, 因为每天都可以看到2

如果日历中只显示年月日, 请问从公元 1900年1月1日 到公元 9999年12月31日, 一共有多少天日历上包含2

from datetime import date, timedelta
t0 = date(1900, 1, 1)
t1 = date(9999, 12, 31)
delta = timedelta(days=1)
res = 0
while t0 < t1:
if '2' in str(t0):
res += 1
t0 += delta
print(res+1) # 输出: 1994240

小蓝发现了一个神奇的闹钟,从纪元时间(1970 年 1 月 1 日 00:00:00)开始,每经过 x 分钟,这个闹钟便会触发一次闹铃 (纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。

对于给出的任意一个格式为 уууу-MM-ddHH:mm:ss 的时间,小蓝想要知道在这个时间点之前 (包含这个时间点) 的最近的一次闹铃时间是哪个时间?

注意,你不必考虑时区问题。

输入格式

输入的第一行包含一个整数 T,表示每次输入包含 T 组数据。

接下来依次描述 T 组数据。

每组数据一行,包含一个时间(格式为 уууу-MM-ddHH:mm:ss)和一个整数 x,其中 x 表示闹铃时间间隔(单位为分钟)。

输出格式

输出 T 行,每行包含一个时间(格式为 уууу-MM-ddHH: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,保证所有时间格式都是合法的。

import sys
input = lambda: sys.stdin.readline().strip()
from datetime import date, datetime, timedelta
t0 = datetime(1970, 1, 1, 0, 0, 0) # 纪元时间
format = '%Y-%m-%d %H:%M:%S'
def s(time_str, x):
# 解析时间字符串
dt = datetime.strptime(time_str, format)
# 计算最近的闹铃时间
delta = timedelta(minutes=x)
# 计算最近的闹铃时间
last_alarm_time = dt - (dt - t0) % delta
return last_alarm_time.strftime(format)
n = int(input())
for _ in range(n):
time_str1, time_str2, x = input().split()
time_str = time_str1 + ' ' + time_str2
print(s(time_str, int(x)))
t1