无法在django中减去日期时间和时间戳?

iCo*_*unk 9 datetime timestamp django-models

我在db中有一个字段timestamp = models.DateTimeField(auto_now_add = True).我想找到时间戳和datetime.now()之间的区别.

当我尝试datetime.now() - 时间戳时,我收到错误:

can't subtract offset-naive and offset-aware datetimes
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Cia*_*ims 21

此错误指的是python存储时间的方式.根据python 文档:

日期和时间对象有两种:"天真"和"意识".这种区别是指对象是否具有时区,夏令时或其他类型的算法或政治时间调整的概念.

django 文档还指出:

禁用时区支持时,Django在本地时间使用天真的日期时间对象.这对于许多用例来说都很简单和充分.在这种模式下,要获得当前时间,您可以写:

import datetime
now = datetime.datetime.now() 
Run Code Online (Sandbox Code Playgroud)

启用时区支持时,Django使用时区感知日期时间对象.如果您的代码创建了datetime对象,他们也应该知道.在此模式下,上面的示例变为:

import datetime
from django.utils.timezone import utc
now = datetime.datetime.utcnow().replace(tzinfo=utc)
Run Code Online (Sandbox Code Playgroud)

您应该确定是否需要在您的站点中识别时区,然后相应地调整存储时间.要将感知的dt转换为天真,您可以使用pytz模块并执行以下操作:

naive_dt = aware_dt.replace(tzinfo=None)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为所有python日期时间都有一个可选的时区属性,tzinfo可用于存储dt与UTC时间偏移量的信息.