2013-10-07 7 views
2

Я пытаюсь найти время в часах и минутах, но единственный способ, которым я знаю, как это сделать, - использовать то, что я сделал ниже. Ниже также мой вывод, и, как вы можете видеть, программа возвращает секунды вместе с десятичными знаками.Слишком много десятичных знаков при использовании timedelta

КОД:

def commercial_time (distance, speed_of_commercial): 
    time = distance/speed_of_commercial 
    seconds = time * 3600 
    real = (datetime.timedelta(seconds = seconds)) 
    return real 

ВЫВОД:

9:46:04.352515 

Мой вопрос, есть ли способ я могу избавиться от этого».352515" ? Я также хотел бы скрыть секунды, если это возможно.

ответ

5

Форматирование timedelta вручную:

def custom_format(td): 
    minutes, seconds = divmod(td.seconds, 60) 
    hours, minutes = divmod(minutes, 60) 
    return '{:d}:{:02d}'.format(hours, minutes) 

Демонстрация:

>>> from datetime import timedelta 
>>> def custom_format(td): 
...  minutes, seconds = divmod(td.seconds, 60) 
...  hours, minutes = divmod(minutes, 60) 
...  return '{:d}:{:02d}'.format(hours, minutes) 
... 
>>> custom_format(timedelta(hours=9, minutes=46, seconds=4, microseconds=352515)) 
'9:46' 

Этот метод делает игнорировать атрибут .days. Если у вас есть timedeltas с более чем 24 часов, используйте:

def custom_format(td): 
    minutes, seconds = divmod(td.seconds, 60) 
    hours, minutes = divmod(minutes, 60) 
    formatted = '{:d}:{:02d}'.format(hours, minutes) 
    if td.days: 
     formatted = '{} day{} {}'.format(
      td.days, 's' if td.days > 1 else '', formatted) 
    return formatted 

Демо:

>>> custom_format(timedelta(days=42, hours=9, minutes=46, seconds=4, microseconds=352515)) 
'42 days 9:46' 
>>> custom_format(timedelta(days=1, hours=9, minutes=46, seconds=4, microseconds=352515)) 
'1 day 9:46' 
>>> custom_format(timedelta(hours=9, minutes=46, seconds=4, microseconds=352515)) 
'9:46' 
Смежные вопросы