无法在 django 中减去日期时间和时间戳?
Posted
技术标签:
【中文标题】无法在 django 中减去日期时间和时间戳?【英文标题】:Can't subtract datetime and timestamp in django? 【发布时间】:2012-05-22 14:03:29 【问题描述】:我在数据库中有一个字段 timestamp = models.DateTimeField(auto_now_add=True)。我想找出那个时间戳和 datetime.now() 之间的区别。
当我尝试 datetime.now() - 时间戳时,我得到了错误:
can't subtract offset-naive and offset-aware datetimes
我该如何解决这个问题?
【问题讨论】:
Can't subtract offset-naive and offset-aware datetimes 的可能重复项 【参考方案1】:这个错误是指python存储时间的方式。根据pythondocumentation:
有两种日期和时间对象:“naive”和“aware”。这种区别是指对象是否具有任何时区、夏令时或其他类型的算法或政治时间调整的概念。
django documentation 还声明:
当时区支持被禁用时,Django 使用天真的日期时间对象 在当地时间。这对于许多用例来说既简单又足够。在 这种模式下,要获取当前时间,可以这样写:
import datetime
now = datetime.datetime.now()
启用时区支持后, Django 使用时区感知的日期时间对象。如果您的代码创建 datetime 对象,他们也应该知道。在这种模式下,示例 上面变成:
import datetime
from django.utils.timezone import utc
now = datetime.datetime.utcnow().replace(tzinfo=utc)
您应该确定是否需要在您的网站中了解时区,然后相应地调整您存储的时间。要将有意识的 dt 转换为天真,您可以使用 pytz module 并执行以下操作:
naive_dt = aware_dt.replace(tzinfo=None)
这是因为所有 python 日期时间都有一个可选的时区属性tzinfo
,它可用于存储 dt 与 UTC 时间的偏移信息。
【讨论】:
【参考方案2】:你好 简短的回答是:
tz_info = your_timezone_aware_variable.tzinfo
diff = datetime.datetime.now(tz_info) - your_timezone_aware_variable:
您必须将时区信息添加到您的 now() 时间。 但是你必须添加变量的 same 时区,这就是我首先阅读 tzinfo 属性的原因。
【讨论】:
以上是关于无法在 django 中减去日期时间和时间戳?的主要内容,如果未能解决你的问题,请参考以下文章