我在db中有一个字段timestamp = models.DateTimeField(auto_now_add = True)。我想找出时间戳和datetime.now()之间的区别。
当我尝试datetime.now() - 时间戳时,我收到错误:
can't subtract offset-naive and offset-aware datetimes
我该如何解决这个问题?
答案 0 :(得分:20)
此错误指的是python存储时间的方式。根据python documentation:
有两种日期和时间对象:“天真”和“意识”。这种区别是指对象是否具有时区,夏令时或其他类型的算法或政治时间调整的概念。
django documentation还声明:
禁用时区支持时,Django使用天真的日期时间对象 在当地时间。这对于许多用例来说都很简单和充分。在 这个模式,要获得当前时间,你会写:
import datetime
now = datetime.datetime.now()
启用时区支持后, Django使用时区感知的日期时间对象。如果您的代码创建 日期时间对象,他们也应该意识到。在这种模式下,例子 上面变成:
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时间偏移量的信息。
答案 1 :(得分:0)
HOLA
简短的回答是:
<div id="banners">
<div id="friend">
<a target="_blank" href="http://www.google.com">
<img src="https://i.stack.imgur.com/kMcaV.jpg?s=328&g=1" alt="TEST 1" width="200" height="200">
</a>
</div>
<div id="friend">
<a target="_blank" href="https://www.google.com">
<img src="https://i.stack.imgur.com/kMcaV.jpg?s=328&g=1" alt="TEST 2" width="400" height="123">
</a>
</div>
</div>
您必须将时区信息添加到now()时间 但是你必须添加变量的相同的时区,这就是为什么我第一次读取tzinfo属性。