python datetime.time операция - PullRequest
       5

python datetime.time операция

1 голос
/ 04 марта 2010
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

Мне нужен минутный интервал между двумя разами.Например, нерабочий:

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

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

Кроме того, если конечное время меньше начального, оно должно выполнить расчет, понимая, что окончание относится ко времени следующих дней.то есть:

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

Как этого достичь?Мне нужно переписать функцию minute_interval для этой цели.

Ответы [ 3 ]

2 голосов
/ 04 марта 2010

Предполагается, что время в том же часовом поясе и нет летнего времени

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 голосов
/ 04 марта 2010

Как это?

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
0 голосов
/ 04 марта 2010
>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...