我需要一些帮助。我需要通过匹配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...
)。请帮忙。
答案 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