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

时间:2012-05-15 04:52:07

标签: datetime django-models timestamp

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

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

can't subtract offset-naive and offset-aware datetimes

我该如何解决这个问题?

2 个答案:

答案 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属性。