Django datetime: can't compare offset-naive and offset-aware datetimes
问题描述
1 | > import datetime |
解决问题
当遇到这种问题,首先要了解一下 offset-naive
和 offset-aware
是如何生成的
- 由Django生成的datetime,例如,从model的字段中读取的值,当Django开启时区支持USE_TZ = True,该值就是
aware
- 由Python原生生成的datetime,就是
naive
因此,问题的解决就是改变一下datetime即可,aware=>naive 或者 naive=>aware
创建一个aware datetime
1 | > import pytz |
这样就生成了一个UTC时区的创建一个 aware datetime
另外一个方法
在Django中一个配置USE_TZ,该配置会影响django.utils.timezone.now()
函数的返回,当 USE_TZ = False 返回 naive datetime,当 USE_TZ = True 返回 aware datetime
因此, 配置 USE_TZ = False 后即可与 datetime.timedelta 等进行计算比较等操作