如何使用Django和python计算日期时间差异

时间:2017-06-29 06:05:10

标签: python django datetime

我需要一些帮助。我需要通过匹配DB date字段值来计算日期时间差异。我在这里得到一些错误。我在解释下面的错误。

  

错误:

expected string or buffer
Request Method: POST
Request URL:    http://127.0.0.1:8000/loginsave/
Django Version: 1.11.2
Exception Type: TypeError
Exception Value:    
expected string or buffer
Exception Location: /usr/local/lib/python2.7/dist-packages/django/utils/dateparse.py in parse_datetime, line 94
Python Executable:  /usr/bin/python
Python Version: 2.7.6

我正在解释下面的代码。

pers = User.objects.get(pk=uid)
if int(cnt) == 3:
    pers.status = 1;
    pers.date = datetime.now
    pers.save()
else:
    cnt1 = int(cnt)+1
    pers.count = cnt1
    pers.save()

我在if statement内收到错误。这里我将日期时间存储在db中。在这里,我需要计算今天的日期时间值的差异,差异应该以小时为单位(i.e-1hrs,2hrs...)。请帮忙。

3 个答案:

答案 0 :(得分:2)

假设pers.date是日期时间字段。 (通过查看您的错误,我认为这是一个CharField,建议您更改为DatetimeField)

然后你应该pers.date = datetime.utcnow().replace(tzinfo=pytz.UTC)

对于timedelta,您可以使用dateutil包。如果你想通过tradtional timedelta对象计算,你可以这样做:

td = pers.date-datetime.utcnow().replace(tzinfo=pytz.UTC)
ts = td.total_seconds()
total_hours = ts/3600
print int(total_hours), "ago"

答案 1 :(得分:1)

如果您导入的日期时间如下:

from datetime import datetime
pers.date = datetime.now() 

否则,如果您这样导入:

import datetime
pers.date = datetime.datetime.now()

要获取日期差异,您可以减去两个日期:

>>> d1 = datetime.datetime(2017, 6, 29, 11, 37, 26, 517124)
>>> d2 = datetime.datetime(2017, 6, 29, 12, 37, 26, 517124) # 1 hour difference
>>> (d2 - d1).total_seconds()/60/60
1.0

答案 2 :(得分:0)

''' Python 3.6 '''
from datetime import datetime, timedelta, timezone

''' date_in_question is a tz-aware datetime '''

A_YEAR = timedelta(days=365)

if datetime.now(tz=timezone.utc) - date_in_question >= A_YEAR:
    pass     # Expired
else:
    pass     # Still edible