TypeError: can‘t subtract offset-naive and offset-aware datetimes

两个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中的时间和日期处理

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值