Django或python 报错 TypeError: can’t subtract offset-naive and offset-aware datetimes

当我们使用Django的datetime模块做时间差时,我们可能会报出 TypeError: can’t subtract offset-naive and offset-aware datetimes

1、原因

第一种情况,做时间差的两个变量不是datetime类型,这时需要做一些转换

第二种情况,两个变量的时区不一致

2、解决方法

import datetime
from pytz import timezone

# 中国上海时区
cst_tz = timezone('Asia/Shanghai') 
# 美国时区
utc_tz = timezone('UTC') 

starttime = datetime.datetime.now().replace(tzinfo=cst_tz)
endtime = datetime.datetime.now().replace(tzinfo=utc_tz)

# 获得相差的时间
interval = (endtime - starttime).seconds
print(interval)
# 这样的方法就会报错 
# TypeError: can't subtract offset-naive and offset-aware datetimes

# 解决方法 换成同一个时区
starttime = datetime.datetime.now().replace(tzinfo=cst_tz)
endtime = datetime.datetime.now().replace(tzinfo=cst_tz)
# 这样就解决问题了
interval = (endtime - starttime).seconds
print(interval)


0

Leave a Reply

Your email address will not be published.