Potrzebuję pomocy. Muszę obliczyć różnicę datetime, dopasowując wartość pola DB {X0}}. Tutaj otrzymuję jakiś błąd. Wyjaśniam poniższy błąd.

Błąd:

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

Poniżej wyjaśniam mój kod.

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()

Tutaj otrzymuję błąd w if statement. Tutaj przechowuję datetime w DB. Tutaj muszę obliczyć różnicę z dzisiejszą wartością datetime i różnicę powinno być w godzinach (i.e-1hrs,2hrs...). Proszę pomóż.

0
user5443928 29 czerwiec 2017, 09:05

3 odpowiedzi

Najlepsza odpowiedź

Zakładając, że pers.date jest pole DateTime. (Widząc swój błąd, myślę, że jest to Charfield, polecam zmianę na DateTimefield)

Wtedy powinieneś zrobić pers.date = datetime.utcnow().replace(tzinfo=pytz.UTC)

Dla Timedelta można użyć pakietu Dateutila. Jeśli chcesz obliczyć przez tradtional Timedelta Obiekt, możesz poniżić poniżej:

td = pers.date-datetime.utcnow().replace(tzinfo=pytz.UTC)
ts = td.total_seconds()
total_hours = ts/3600
print int(total_hours), "ago"
2
Swagat 29 czerwiec 2017, 06:52
''' 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
0
Elmer Esque 13 styczeń 2018, 16:12

Jeśli importowałeś taki datetime:

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

W przeciwnym razie, jeśli importowałeś taki:

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

Aby uzyskać różnicę daty, możesz odjąć dwa daty:

>>> 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
1
trex 29 czerwiec 2017, 06:10