2015-02-04 10 views
-1

Я хочу найти разницу между двумя моментами, например (05:33, 16:01). Так что я знаю, что нужно написать скрипт, который будет делать это, и я могу сделать с этим ДЕФ:Разница во времени python

def diff_minutes(start_time, end_time): 
    """returns the difference of two inputs 

    number, number -> number""" 
    return int(start_time - end_time) 


def hours_and_minutes_str(hours, minutes): 
    """returns a string that represents the time span, including units 

    number, number -> str""" 
    print (hours, 'hours' , minutes , "minutes") 

def hours_and_minutes_to_minutes(hours, minutes): 
    """returns the total minutes of the input 

    number, number -> number""" 
    return (hours * 60 + minutes) 

def minutes_to_hours_and_minutes(minutes): 
    """returns two numbers given just a number of minutes 

    number, number -> number""" 
    return (int(minutes/60), minutes%60) 

def extract_hours(tm:'hours:minutes'): 
    """returns an integer representing the number of hours 

    number, number -> number""" 
    return int(tm.split(':')[0]) 

def extract_minutes(tm:'hours:minutes'): 
    """returns an integer representing the number of minutes 

    number, number -> number""" 
    return int(tm.split(':')[1]) 

Любая помощь приветствуется.

+7

Было бы гораздо легче просто преобразовать их в [ 'datetime'] (https://docs.python.org/3/library/datetime.html) объектов. – iCodez

ответ

2

Да, определенно datetime - вот что вам нужно здесь. В частности, функция strptime, которая анализирует строку на объект времени.

from datetime import datetime 
s1 = '10:33:26' 
s2 = '11:15:49' # for example 
FMT = '%H:%M:%S' 
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT) 

Это получает вас timedelta объект, который содержит разницу между двумя моментами. Вы можете делать все, что хотите, например, конвертируя его в секунды или добавляя его к другому datetime.

+0

являются s1 и s2 частями для ввода? – holaprofesor

+2

Да, вы можете сделать их пользователем, или вы можете вставить их в свой код. –

3

Если у вас есть только часы и минуты, вы можете использовать timedelta который довольно прост:

>>> from datetime import timedelta 
>>> t1 = timedelta(hours=5, minutes=33) 
>>> t2 = timedelta(hours=16, minutes=1) 
>>> print((t2 - t1).total_seconds()) 
37680.0 
>>> print (t2 - t1) 
10:28:00 

У меня нет фактического ввода вы используете, но кажется, что вы знаете, как отобразить строки к аргументам создания самостоятельно :)

Как правило, вы можете отобразить такие строки, как '05'33' с использованием split и int:

>>> hours, minutes = map(int, '05:33'.split(':')) 
>>> hours 
5 
>>> minutes 
33 
+0

Могу ли я изменить формат t1 на hh: mm? – holaprofesor

+0

Я не уверен, что вы спрашиваете ... Вам нужна помощь в создании аргументов построения объектов timedelta? Если да, укажите текст, который вы разбираете в своем вопросе. –

+0

Да, я не совсем уверен, нужно ли мне просто скопировать это в свой сценарий или что. в значительной степени на подставке – holaprofesor

0

Я настоятельно рекомендую использовать для этого стандартные библиотеки Python. См. Python reference.

import datetime 

time1 = '05:33' 
time2 = '16:01' 

format = '%H:%M' 
datetime1 = datetime.datetime.strptime(time1, format) 
datetime2 = datetime.datetime.strptime(time2, format) 

minutes = (datetime2 - datetime1).seconds/60 
+0

Почему вы включили секунды? это критическое для моей проблемы? – holaprofesor

+0

Когда вы вычитаете два времени в Python, вы получаете timedelta. Объект timedelta позволяет извлекать дни и секунды. Поскольку вам, казалось, нужны минуты, на основе ваших образцов кода, я преобразовал timedelta.seconds в минуты. Обратите внимание, что время без дат может делать интересные вещи, поскольку вы пересекаете границы дня. –