2013-02-25 197 views
6

我正在使用python,並且想要計算兩次之間的差異。計算兩次python之間的差異

其實我不得不方案來計算組織的登錄和退出時間, 例如之間的差異有工作時間一些特定的限制,所以 如果在早上9:00 AM如果用戶登錄,他在6:00 PM註銷在晚上 我們需要計算他在辦公室呆了多少時間(在本場景中是9 hours),但是我想在python中這樣做,所以任何人都可以請讓我知道如何實現上述的概念計算登錄和註銷時間之間的差異?

+0

您正在計算兩個*毛利*之間的差異,而不是兩個時間點?!? – 2013-02-25 13:08:20

+1

delta = change,你在比較時間的變化 – Gjordis 2013-02-25 13:08:44

+0

k對不起,但我的概念是計算實際登錄和註銷時間的持續時間 – Fedrik 2013-02-25 13:09:16

回答

19
>>> start = datetime.datetime(year=2012, month=2, day=25, hour=9) 
>>> end = datetime.datetime(year=2012, month=2, day=25, hour=18) 
>>> diff = end - start 
>>> diff 
datetime.timedelta(0, 32400) 
>>> diff.total_seconds() 
32400 
>>> diff.total_seconds()/60/60 
9 
>>> 
+1

你可以打印'str(dif)'而不是diff.seconds/60/60來獲得更好的格式。 – 2013-02-25 13:12:46

+1

如果你已經登錄了一天以上,你會想要使用'diff.total_seconds()' – 2013-02-25 13:19:07

+0

我們如何在這裏提供小時值,例如用戶在早上9點登錄並在下午6點登出? – Fedrik 2013-02-25 13:25:56

1

您正在使用錯誤的類來表示時間。

> import datetime 
> print datetime.datetime.now() - datetime.datetime(2013, 1, 1) 
55 days, 14:11:06.749378 

返回對象是timedelta。但差異當然是在datetime對象之間計算的。

3

使用divmod這個任務

>>> start = datetime.datetime.utcnow() 
>>> end = datetime.datetime.utcnow() 
>>> divmod(end - start, 60) 
(0, 2.454) # (minutes, seconds) 

divmod會給

+0

divmod()對於在幾分鐘或幾小時內轉換所需時間內的秒數非常有用。 – 2013-07-15 16:11:27

+3

divmod不支持datetime或timedelta對象。你需要使用end.seconds和start.seconds – 2014-02-05 17:09:38

2

在我看來@ Fabian的回答可能是最好的。但是,我們是否讓它變得更加困難?

你需要按天,月,年來計算嗎?

如果你正在生成這個,使用timesec表示不是更容易嗎?

當在用戶登錄:

user_login_time = time.time() 

當用戶再次訪問:

time_difference = time.time() - user_login_time 

然後檢查,看是否TIME_DIFFERENCE是XXXX秒以上?現在我假設,你只是要檢查用戶是否還沒有登錄XX分鐘,或xx小時?

否則,我會強調,如果您正在查看解析時間日期字符串或需要對數據執行其他時間/日期函數,那麼@ Fabian的答案將是最好的。

我還會強調,如果你使用這種方法,爲時間做常量,或者確保評論它們,使它更具可讀性。

但是,如果您只是試圖找出用戶在最近30分鐘內是否已經打開,這可能會更容易。