【专题】日期时间

【专题】日期时间

一:【重点】常用的时间库✦✦✦

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
输出:2023430日是星期日
---------------------------------------

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
------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值