2017-06-29 128 views
0

我需要一些幫助。我需要通過匹配DB date字段值來計算日期時間差異。在這裏,我收到了一些錯誤。我正在解釋下面的錯誤。如何使用Django和python計算日期時間差異

Error:

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。在這裏,我將日期時間存儲在數據庫中。在這裏,我需要計算與今天的日期時間值的差異,差異應該以小時爲單位(i.e-1hrs,2hrs...)。請幫忙。

+0

if語句中的cnt是什麼? – Exprator

+0

我已經計算過它。其1/2/3。 – subhra

+0

你想要什麼日期有所不同?今天的日期時間和什麼? – Exprator

回答

3

假設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" 
+0

如何計算小時差。 – subhra

+0

我用你的代碼,但它拋出這個異常值:\t 不能減去偏移天真和偏移感知日期時間錯誤。 – subhra

+0

在我的情況下,我得到的數據庫日期類似於'2017-06-29 06:14:14.446676 + 00:00',而今天的日期時間值是'2017-06-29 06:29:52.568665'。 – subhra

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 
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 
+1

歡迎來到SO。您需要縮進代碼才能正確格式化(或按下「{}」圖標) – AjahnCharles