使用datetime模块中的timedelta对象可直接计算两日期间差值,支持天、秒、微秒等单位,并能准确处理跨年与闰年;通过total_seconds()方法可换算为小时、分钟等,还可用于日期加减运算。

在Python里,要计算两个日期之间的差值,最直接也最推荐的方式就是使用内置的
datetime
datetime
timedelta
说实话,每次遇到需要计算日期差的需求,我脑子里首先跳出来的就是
datetime
datetime
-
timedelta
timedelta
days
seconds
microseconds
举个例子吧,假设我想知道从我写这篇文章的某个时间点,到未来某个发布日之间还有多少时间。
from datetime import datetime, timedelta
# 定义两个日期时间点
start_time = datetime(2023, 10, 26, 10, 0, 0) # 2023年10月26日 上午10点
end_time = datetime(2023, 11, 15, 14, 30, 0) # 2023年11月15日 下午2点30分
# 直接相减
time_difference = end_time - start_time
print(f"开始时间: {start_time}")
print(f"结束时间: {end_time}")
print(f"时间差 (timedelta对象): {time_difference}")
# 访问timedelta的属性
print(f"时间差的天数: {time_difference.days} 天")
print(f"时间差的秒数 (不含天): {time_difference.seconds} 秒")
print(f"时间差的微秒数 (不含天和秒): {time_difference.microseconds} 微秒")运行这段代码,你会看到
time_difference
19 days, 4:30:00
days
seconds
seconds
total_seconds()
立即学习“Python免费学习笔记(深入)”;
拿到
timedelta
timedelta
total_seconds()
# 沿用上面的 time_difference
# time_difference = datetime(2023, 11, 15, 14, 30, 0) - datetime(2023, 10, 26, 10, 0, 0)
total_seconds_diff = time_difference.total_seconds()
print(f"\n总秒数: {total_seconds_diff} 秒")
# 转换为分钟
total_minutes_diff = total_seconds_diff / 60
print(f"总分钟数: {total_minutes_diff} 分钟")
# 转换为小时
total_hours_diff = total_minutes_diff / 60
print(f"总小时数: {total_hours_diff} 小时")
# 转换为天数(浮点型,包含小数部分)
total_days_diff = total_hours_diff / 24
print(f"总天数: {total_days_diff} 天 (浮点型)")你看,通过
total_seconds()
days * 24 * 60 * 60 + seconds
timedelta
dateutil
timedelta
一个我经常被问到的问题是:“如果日期差跨越了年份,或者包含了闰年,
timedelta
datetime
timedelta
Python的
datetime
datetime
我们来做个小实验,看看跨年和闰年的情况:
# 跨年计算
new_year_eve = datetime(2023, 12, 31, 23, 59, 59)
new_year_day = datetime(2024, 1, 1, 0, 0, 0)
diff_cross_year = new_year_day - new_year_eve
print(f"\n跨年时间差: {diff_cross_year} (仅1秒之差)")
# 包含闰年2月29日
leap_year_start = datetime(2024, 2, 28, 12, 0, 0) # 2024是闰年
leap_year_end = datetime(2024, 3, 1, 12, 0, 0)
diff_leap_year = leap_year_end - leap_year_start
print(f"包含闰年2月29日的时间差: {diff_leap_year} (刚好2天)")
# 对比非闰年
non_leap_year_start = datetime(2023, 2, 28, 12, 0, 0) # 2023是非闰年
non_leap_year_end = datetime(2023, 3, 1, 12, 0, 0)
diff_non_leap_year = non_leap_year_end - non_leap_year_start
print(f"非闰年2月28日到3月1日的时间差: {diff_non_leap_year} (刚好1天)")从上面的输出你可以看到,
diff_cross_year
diff_leap_year
diff_non_leap_year
datetime
datetime
timedelta
from datetime import datetime, timedelta
# 当前时间
now = datetime.now()
print(f"\n当前时间: {now}")
# 创建一个 timedelta 对象,表示3天5小时15分钟
future_offset = timedelta(days=3, hours=5, minutes=15)
print(f"时间偏移量: {future_offset}")
# 将偏移量加到当前时间上,得到未来的时间
future_time = now + future_offset
print(f"未来时间 (当前时间 + 3天5小时15分钟): {future_time}")
# 创建另一个 timedelta 对象,表示1周又2天
past_offset = timedelta(weeks=1, days=2)
print(f"另一个时间偏移量: {past_offset}")
# 从当前时间减去偏移量,得到过去的时间
past_time = now - past_offset
print(f"过去时间 (当前时间 - 1周2天): {past_time}")
# 甚至可以用 timedelta 来迭代日期
print("\n从今天开始的接下来5天:")
current_date = datetime.now().date() # 只取日期部分
one_day = timedelta(days=1)
for i in range(5):
print(f" {current_date + i * one_day}")通过这些例子,你可以看到
timedelta
current_task_creation_time + timedelta(days=7)
timedelta
datetime
以上就是python中怎么计算两个日期之间的差_Python计算日期差 timedelta用法的详细内容,更多请关注php中文网其它相关文章!
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号