2014-10-02 3 views
3

У меня есть переменная, у которой есть секунды, и я хочу преобразовать в подробный формат времени. Мне это нравится в данный момент.Преобразование секунд в формат времени чтения

runTime = '%s Hours:Minutes:Seconds' % time.strftime("%H:%M:%S", time.gmtime(runTime)) 

Выходы:

17:25:46 Hours:Minutes:Seconds 

Я хотел бы, чтобы он отформатирован как таковой:

17 Hours 25 Minutes 46 Seconds 

В конце концов, я хотел бы иметь возможность сократить при меньших значениях:

Так если значение составляет минуты и секунды, оно должно понравиться

15 Minutes 5 Seconds 

и если есть более 24 часов, а затем дней

1 Days 15 Hours 5 Minutes 1 Seconds 
+0

https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior – vminof

ответ

0

Вы должны сделать этот шаг за шагом, первым определение дней/часов, затем добавить минут/секунд.

import time 

current_time = time.gmtime() # Or whatever time. 
hours = int(time.strftime("%H", current_time)) 
days = hours/24 
hours = hours % 24 

time_string = "" 
if days > 0: 
    time_string += "%d Days " % days 
if hours > 0: 
    time_string += "%d Hours " % hours 

time_string += time.strftime("%M Minutes %S Seconds", current_time) 

Вы можете разместить дополнительные слова непосредственно в первый аргумент time.strftime «s. %H:%M:%S не является необходимым форматом; это гораздо больше похоже на форматирование строк, где вы можете добавлять слова везде, где есть аргументы, где вы хотите.

7

Вы должны использовать отличный dateutil package и тогда ваша задача становится тривиальной:

>>> from dateutil.relativedelta import relativedelta as rd 
>>> fmt = '{0.days} days {0.hours} hours {0.minutes} minutes {0.seconds} seconds' 
>>> print(fmt.format(rd(seconds=62745))) 
0 days 17 hours 25 minutes 45 seconds 

Немного передовой пример, который показывает только значения для тех полей, которые отличны от нуля:

>>> intervals = ['days','hours','minutes','seconds'] 
>>> x = rd(seconds=12345) 
>>> print(' '.join('{} {}'.format(getattr(x,k),k) for k in intervals if getattr(x,k))) 
3 hours 25 minutes 45 seconds 
>>> x = rd(seconds=1234432) 
>>> print(' '.join('{} {}'.format(getattr(x,k),k) for k in intervals if getattr(x,k))) 
14 days 6 hours 53 minutes 52 seconds