【专题】日期时间
一:【重点】常用的时间库✦✦✦
datetime.date:表示日期(年、月、日)。
datetime.time:表示时间(时、分、秒、微秒)。
datetime.datetime:表示日期和时间的组合。
datetime.timedelta:表示两个日期或时间之间的差异。
1、定义date对象(年,月,日)
from datetime import datetime,timedelta
import datetime
special_date=datetime.date(2025,3,20)
print(special_date)
---------------------------------------
2025-03-20
---------------------------------------
data之间的减法
from datetime import datetime,timedelta import datetime a=datetime.date(2025,3,20) b=datetime.date(2025,4,4) print(b-a) ------------------------------- 15 days, 0:00:00 -------------------------------
2、定义time对象(时,分,秒)
from datetime import datetime,timedelta
import datetime
special_time=datetime.time(20,40,59)
print(special_time)
---------------------------------------
20:40:59
---------------------------------------
3、定义datetime(年,月,日,时,分,秒)
from datetime import datetime,timedelta
import datetime
a = datetime.datetime(2024, 3, 31, 20, 30, 50)
print(a.date())
print(a.time())
print(a)
-------------------------------------------
2024-03-31
20:30:50
2024-03-31 20:30:50
-------------------------------------------
4、计算日期和时间差
from datetime import datetime,timedelta
import datetime
# 当前日期和时间
now = datetime.now()
print("当前日期和时间:", now)
# 创建一个时间间隔
delta = timedelta(days=5, hours=3, minutes=30)
# 当前日期加上时间间隔
future_date = now + delta
print("未来的日期和时间:", future_date)
# 当前日期减去时间间隔
past_date = now - delta
print("过去的日期和时间:", past_date)
------------------------------------------------
当前日期和时间: 2025-03-20 20:45:48.821887
未来的日期和时间: 2025-03-26 00:15:48.821887
过去的日期和时间: 2025-03-15 17:15:48.821887
------------------------------------------------
5、计算两个日期之间的天数差
import datetime
from datetime import datetime,timedelta
string1="2025-3-21 00:00:00"
string2="2025-4-3 00:00:00"
start_day=datetime.strptime(string1,"%Y-%m-%d %H:%M:%S")
end_day=datetime.strptime(string2,"%Y-%m-%d %H:%M:%S")
# 时间步长为1天
delta=timedelta(days=1)
# 相差的天数
days=(end_day-start_day) // delta
print(f"两个日期之间的天数差: {days}")
-----------------------------------------------
两个日期之间的天数差: 13
-----------------------------------------------
6、时间格式化
strftime
:将日期时间对象格式化为指定格式的字符串。
strptime
:解析一个按照特定格式的字符串,并将其转换为一个日期时间对象。
import datetime
from datetime import datetime,timedelta
# datetime对象【日期对象】 格式化 字符串
formatted_now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的当前日期和时间:", formatted_now)
# 字符串 格式化 datetime对象【日期对象】
date_string = "2024-02-08 14:30:59"
parsed_datetime = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print("解析后的日期和时间:", parsed_datetime)
-----------------------------------------------------------
格式化后的当前日期和时间: 2025-03-20 21:43:50
解析后的日期和时间: 2024-02-08 14:30:59
-----------------------------------------------------------
7、提取日期元素
import datetime
from datetime import datetime,timedelta
date=datetime(2025,3,29,22,21,17)
print(date) # 日期
print(date.year) # 年
print(date.month) # 月
print(date.day) # 日
print(date.hour) # 时
print(date.minute) # 分
print(date.second) # 秒
----------------------------------
2025-03-29 22:21:17
2025
3
29
22
21
17
----------------------------------
二:题目练习
1、判断闰年
闰年的二月有 29 天
平年的二月有28天
给定一个年份,判断其是平年还是闰年。(提示:如果年份是400的倍数,或者是4的倍数但不是100的倍数,那么称这个年份为闰年)
n = int(input())
if (n%400==0) or (n%4==0 and n%100!=0):
print("YES")
else:
print("NO")
------------------------------
输入:1900
输出:NO
------------------------------
2、第几天
2000 年的 1 月 1 日,是那一年的第 1天。
那么,2000 年的 5 月 4 日,是那一年的第几天?
import datetime
from datetime import datetime,timedelta
start=datetime(2000,1,1)
end=datetime(2000,5,4)
# 时间步长为1天
delta=timedelta(days=1)
# 两个日期相差多少天
days=(end-start)//delta
print(days+1)
--------------------------------
125
--------------------------------
3、含 2 天数
小蓝特别喜欢 22,今年是公元 20202020 年,他特别高兴,因为每天日历上都可以看到 22。
如果日历中只显示年月日,请问从公元 19001900 年 11 月 11 日到公元 99999999 年 1212 月 3131 日,一共有多少天日历上包含 22。即有多少天中年月日的数位中包含数字 22。
import datetime
from datetime import datetime,timedelta
start=datetime(1900,1,1)
end=datetime(9999,12,31)
delta=timedelta(days=1)
count=0
# 循环每一个日期:无法到达9999年12月31日
while start < end:
if '2' in str(start):
count+=1
start += delta
print(count+1) # 最后要+1【在“9999年12月31日”中含有2】
--------------------------------
1994240
--------------------------------
4、合法日期
小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。
没想到,日记很快就被老师发现了问题,原来小蓝记完 8 月 31 日的日记,竟又记了 8 月 32 日和 8 月 33 日的日记。这显然是有问题的,因为根本没有 8 月 32 日和 8 月 33 日。
给定一个月份和一个日期,请问 2021 年有没有这一天。
import datetime
from datetime import datetime,timedelta
month=int(input())
day=int(input())
try:
date=datetime(2021,month,day)
print("yes")
except:
print("no")
-------------------------------------------
输入:
8 # 月
32 # 日
输出:
no
-------------------------------------------
5、天数
输入一个月份,请输出 2021 年这个月有多少天。
month=int(input())
days=31
if month==4 or month==6 or month==9 or month==11:
days=30
elif month==2:
if 2021%400==0 or (2021%4==0 and 2021%100!=0):
days=29
else:
days=28
print(days)
-----------------------------
输入:2
输出:28
-----------------------------
6、时间加法
现在时间是 a 点 b 分,请问 t 分钟后,是几点几分?
import datetime
from datetime import datetime,timedelta
a=int(input())
b=int(input())
t=int(input())
date=datetime(2025,3,29,a,b)
delta=timedelta(minutes=t)
date+=delta
# 提取
print(date.hour)
print(date.minute)
--------------------------------------
输入:
3
20
165
输出:
6
5
--------------------------------------
7、时间显示
小蓝要和朋友合作开发一个时间显示的网站。
在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
import datetime
from datetime import datetime,timedelta
second=int(input())
start=datetime(1970,1,1)
delta=timedelta(milliseconds=second)
end=start+delta
# datetime对象【日期对象】 格式化 字符串
str_date=end.strftime("%Y-%m-%d %H:%M:%S")
print(str_date[11:19])
------------------------------------------
输入:46800999
输出:13:00:00
------------------------------------------
8、星期计算
输入日期,计算是这个日期是星期几。
import datetime
from datetime import datetime,timedelta
year=int(input())
month=int(input())
day=int(input())
weekDay=day
for i in range(1900,year):
if i%400==0 or (i%4==0 and i%100!=0):
weekDay+=366
else:
weekDay+=365
WEEK_DAYS=["日","一","二","三","四","五","六"]
for i in range(1,month):
days=0
if month==4 or month==6 or month==9 or month==11:
days=30
elif month==2:
if 2021%400==0 or (2021%4==0 and 2021%100!=0):
days=29
else:
days=28
weekDay+=days
print("%d年%d月%d日是星期%s" % (year,month,day,WEEK_DAYS[weekDay%7]))
---------------------------------------
输入:
2023
4
30
输出:2023年4月30日是星期日
---------------------------------------
9、停车时间
小蓝将自己的车停在路边,在同一天将车开走。给定停车时间和开走时间,请问小蓝停了多长时间?
输出总共停车的时间,格式为 HH:MM:SS。
import datetime
from datetime import datetime,timedelta
a=input()
b=input()
start=datetime.strptime(a, "%H:%M:%S")
end=datetime.strptime(b, "%H:%M:%S")
delta = timedelta(seconds=1)
time=(end-start)/delta
# 计算停车时间
hours = int(time // 3600)
minutes = int((time % 3600) // 60)
seconds = int(time % 60)
# 输出停车时间
print('{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds))
------------------------------------------------------------
输入:
08:58:10
17:20:31
输出:
08:22:21
------------------------------------------------------------