Python 最常用8大时间-日期处理场景(time & datetime)

阅读此文:你将掌握最常见的时间/日期处理方式

🌈Hi,小伴们~

时间无形,却在你敲下的每一行代码里奔腾:日志靠它留痕,任务因它唤醒,报表凭它归栏……

今天,我们就用一杯咖啡的时间,把 Python 中最常用的 8 个日期时间技巧,一口气盘清楚!

图片

🎭先认识2位主角

Python世里里时间-日期由2个官方库话事:

①time:1996 年随 Python 1.4 登场

底层秒表—能计算时间戳,能让线程小睡片刻却不会帮你做日期加减,不懂夏令时

②dtetime:2003 年在 Python 2.3 加入

高级日历—把年-月-日-时-分-秒封装成对象,想加 30 天、减 2 小时、转时区,一句话就能搞定

一句话总结:time 管“秒”,datetime 管“天”日常开发 90 % 需求交给 dateime,余下10 % 需精确到秒或与操作系统交互时,再请 time 出马

8 大高频场景讲解🎯

场景1:获取当下的日期/时间

示例代码如下:
from datetime import datetime

# 方法1:年-月-日 时:分:秒:毫秒
now = datetime.now()
print(now)  
# 输出:2025-07-13 14:30:15.123456

# 方法2:只要日期年-月-日
today = datetime.now().date()
print(today)  
# 输出:2025-07-13

# 方法3:只要时间时:分:秒:毫秒
current_time = datetime.now().time()
print(current_time)  
# 输出:14:30:15.123456

📝备注:datetime模块中的datetime类能快速获取当下的日期和时间

场景2:程序需暂停几秒⏳再执行

import time
print("开始")
time.sleep(3) #等待3秒
print("3 秒后继续")

📝备注:time.sleep(3) 会将当前线程暂停3秒 ,操作系统会在 3 秒后将其唤醒,继续执行后续代码

场景3:测算代码运行所耗的时间

import time

# 获取开始的时间戳
start = time.perf_counter()  
# 模拟耗时操作
sum = 0
for i in range(1000000):
    sum += i
end = time.perf_counter() 
print(f"耗时:{end - start:.4f}秒")  
# 输出:耗时:0.0453秒

📝备注:此处也可用time.time()实现,但perf_counter()精度更高,且不受系统时钟调整等因素影响更适合算间隔。time.time()或perf_counter()得到的是时间戳:( Python读取你操作系统当前时间,再换算成自UTC1970-01-01 00:00:00 起经过的秒数,最后以浮点数形式返回,如时间戳:1689345123.123456 )

场景4:生成特定的时间样式(如年-月-日)

from datetime import datetime

now = datetime.now()
# 转成:"2025年07月13日 14:30"格式
formatted = now.strftime("%Y年%m月%d日 %H:%M")
print(formatted)

# 转成"Aug 20, 2023"格式
english_style = now.strftime("%b %d, %Y")
print(english_style)

📝常用占位符汇总:

占位符

含义

示例输出

%Y

四位数年份

2025

%m

两位数月 (01-12)

07

%d

两位数日 (01-31)

15

%H

24 小时制时 (00-23)

14

%I

12 小时制时 (01-12)

02

%M

两位分钟 (00-59)

30

%S

两位秒 (00-59)

45

%A

星期全称

Monday

%a

星期简称

Mon

📝备注:strftime 就像一个神奇的“时间变形器”能把日期对象变成你心中所想的任何格式的字符串

场景5:构建自定义的时间对象

from datetime import datetime

# 构造一个格式为:"2025-07-13"日期
date_obj = datetime.strptime("2025-07-13", "%Y-%m-%d").date()
print(date_obj)#2025-07-13
print(type(date_obj))  
# <class 'datetime.date'>

# 构造一个格式为:"14:30:00"时间
time_obj = datetime.strptime("14:30:00", "%H:%M:%S").time()
print(time_obj)  # 14:30:00

# 构造格式:日期+时间
log_time = datetime.strptime("2025-07-13 14:30:15", "%Y-%m-%d %H:%M:%S")
print(log_time)  # 2025-07-13 14:30:15

也可用date进行日期的创建:

from datetime import date
d1 = date(2025, 9, 1)
d2 = date(2025, 9, 5)
# date用于只要日期的操作更便捷
#打印结果:4 days

📝备注:构建日期时留意SupportsIndex上限如:2月不能有30天,不会有13月

场景6:日期也能做加减法

from datetime import datetime, timedelta
# 计算10天后的时间
today = datetime.today()
future=today + timedelta(days=10)
print("10 天后:",future )

# 计算2小时前的时间
past = datetime.now() - timedelta(hours=2)
print(past)

# 计算2个日期的间隔
birth1 = datetime(2000, 2, 29)
birth2 = datetime(2024, 2, 29)
print("相隔天数:", (birth2 - birth1).days)

📝备注:timedelta 就是日期的界缩进尺支持days、hours、minutes、seconds、microseconds多种样式,可灵活组合

场景7:求特定日期(如:本月第1天/本周第1天)

from datetime import datetime, timedelta, date

# 获取本月第一天
first_day = datetime.now().replace(day=1)

# 获取本月最后一天(28+5肯定到下月)
#巧用下个月第一天减1天
next_month = datetime.now().replace(day=28) + timedelta(days=5)
last_day = next_month.replace(day=1) - timedelta(days=1)

# 获取本周周一
today = datetime.now()
monday = today - timedelta(days=today.weekday())

📝备注:replace()会返回一个新的对象,能调整特定的年-月-日、时-分-秒,而函数weekday()返回今天是星期几,若为周一为0,周日则返回值是6

场景8:一键切换全球不同时区

from datetime import datetime
from zoneinfo import ZoneInfo

tokyo_time = datetime.now(ZoneInfo("Asia/Tokyo"))
print("东京时间:", tokyo_time.strftime("%Y-%m-%d %H:%M:%S"))

📝备注:zoneinfo 模块在Python 3.9+ 自带,更低版本的需要用pip进行安装,默认情况下是读取操作系统已配置的时区,传输一个时区对象ZoneInfo() 让代码轻松切换世界各地时钟如:北京时间Asia/Shanghai、纽约时间America/New_York

📌一键收藏

需求

推荐 API

拿当前时间

datetime.now()

字符串转日期

datetime.strptime()

日期转字符串

.strftime()

日期加减

timedelta

计时计算

time.perf_counter()

时区转换

ZoneInfo("Area/City")

🏁结语:

📌了解更多,可关注我的微信公众号:“ Python-伍六七 ”,及时拿一手资讯和应用案例!

Python 中日期-时间的处理技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值