两个datetime进行时差计算报错:
TypeError: can't subtract offset-naive and offset-aware datetimes
原来是两个相减的时间时区不一致
# -*- coding: utf-8 -*-
from datetime import datetime
import pytz
now1 = datetime.now(tz=pytz.UTC)
print(now1)
# 零时区的时间 2021-06-11 04:11:39.588770+00:00
now2 = datetime.now()
print(now2)
# 东八区的时间 2021-06-11 12:12:17.431790
# print(now2 - now1)
# TypeError: can't subtract offset-naive and offset-aware datetimes
now3 = now1.replace(tzinfo=None)
print(now3)
# 去掉时区之后 2021-06-11 04:15:06.453159
print(now2 - now3)
# 8:00:00.000061
还有一种方法,是转为时间戳再进行相减
# -*- coding: utf-8 -*-
from datetime import datetime, timedelta
import pytz
# utc时区
t1 = datetime.now(tz=pytz.UTC)
# 东八区时区
t2 = datetime.now(tz=pytz.timezone('Asia/Shanghai'))
# 默认没有时区 tz=None
t3 = datetime.now()
print(t1) # 2024-01-07 11:10:02.726546+00:00
print(t2) # 2024-01-07 19:10:02.759021+08:00
print(t3) # 2024-01-07 19:10:02.759044
t1 = t1 + timedelta(seconds=10)
# 两个时间都有时区,可以相减
print(t1 - t2) # 0:00:09.967525
# 有时区的时间 和 没有时区的时间相减会报错
# print(t1 - t3)
# TypeError: can't subtract offset-naive and offset-aware datetimes
# 统一转为时间戳后,无论有时区还是没有时区,计算结果一样
print(t1.timestamp() - t2.timestamp()) # 9.967525005340576
print(t1.timestamp() - t3.timestamp()) # 9.967502117156982
参考
python datetime offset-aware与offset-navie相互转换
Python中的时间和日期处理