2010-03-04 33 views
1
t1 = datetime.time(12, 10, 0, tzinfo=GMT1()) # 12:10 
t2 = datetime.time(13, 13, 0, tzinfo=GMT1()) #13:13 
t3 = datetime.time(23, 55, 0, tzinfo=GMT1()) #23:55 
t4 = datetime.time(01, 10, 0, tzinfo=GMT1()) #01:10 

我需要兩次之間的分鐘間隔。例如非工作之一:python datetime.time操作

def minute_interval(start,end): 
    return end - start 

minute_interval(t1,t2) #should give 63 mins. 

此外,如果結束時間小於開始,它應該由understaing做到底的計算是從接下來的幾天時間。即:

minute_interval(t3,t4) #should give 75 mins. 

這怎麼能實現?我需要爲此目的重寫minute_interval函數。

+1

這是63分鐘不是73 – SilentGhost 2010-03-04 10:51:03

回答

2

假設時間是在同一時區,並沒有DST

import datetime 

def minute_interval(start, end): 
    reverse = False 
    if start > end: 
      start, end = end, start 
      reverse = True 

    delta = (end.hour - start.hour)*60 + end.minute - start.minute + (end.second - start.second)/60.0 
    if reverse: 
      delta = 24*60 - delta 
    return delta 

t1 = datetime.time(12, 10, 0) # 12:10 
t2 = datetime.time(13, 13, 0) #13:13 
t3 = datetime.time(23, 55, 0) #23:55 
t4 = end = datetime.time(01, 10, 0) #01:10 

print minute_interval(t1, t2) 
print minute_interval(t3, t4) 

輸出:

63 
75 

否則你是使用datetime.datetime的更好,支持減法,並給出datetime.timedelta ,對於時區你可以使用pytz庫。

0
>>> import datetime 
>>> t1 = datetime.time(12, 10, 0) 
>>> t2 = datetime.time(13, 13, 0) 
>>> today = datetime.datetime.today() 
>>> t1n = datetime.datetime.combine(today, t1) 
>>> t2n = datetime.datetime.combine(today + datetime.timedelta(days=int(t2 < t1)), t2) 
>>> d = t2n - t1n 
>>> (d.days * 86400 + d.seconds) // 60 
63 
0

這是怎麼回事?

def minute_interval(start,end): 
    start_sec= (start.hour*60+start.minute)*60+start.second 
    end_sec= (end.hour*60+end.minute)*60+end.second 
    return (end_sec-start_sec)/60.0