Как время в секундах вывести в формате год день час минута секунда?
Как время в секундах вывести в формате год день час минута секунда? А то пока что, час минута секунда.
def format_duration(seconds):
seconds = seconds % (24 * 3600)
hour = seconds // 3600
seconds %= 3600
min = seconds // 60
seconds %= 60
Ответы (3 шт):
Автор решения: DezZzy
→ Ссылка
Чтобы добавить вывод количества лет и дней в формате "год день час минута секунда" можно воспользоваться следующим кодом:
def format_duration(seconds):
minute = 60
hour = 60 * minute
day = 24 * hour
year = 365 * day
years = seconds // year
seconds %= year
days = seconds // day
seconds %= day
hours = seconds // hour
seconds %= hour
minutes = seconds // minute
seconds %= minute
time_elements = []
if years > 0:
time_elements.append('{} year{}'.format(years, 's' if years != 1 else ''))
if days > 0:
time_elements.append('{} day{}'.format(days, 's' if days != 1 else ''))
if hours > 0:
time_elements.append('{} hour{}'.format(hours, 's' if hours != 1 else ''))
if minutes > 0:
time_elements.append('{} minute{}'.format(minutes, 's' if minutes != 1 else ''))
if seconds > 0:
time_elements.append('{} second{}'.format(seconds, 's' if seconds != 1 else ''))
if len(time_elements) == 0:
return 'just now'
if len(time_elements) == 1:
return time_elements[0]
last_element = time_elements.pop()
return '{} and {}'.format(', '.join(time_elements), last_element)
Автор решения: Acinit
→ Ссылка
А вот метод гораздо компактнее:
import datetime
def convert_seconds(seconds):
return f"{seconds//31536000} год {(seconds//86400)%365} день {(seconds//3600)%24} час {(seconds//60)%60} минута {seconds%60} секунда"
Произведем тесты на поведение:
print(convert_seconds(31536000)) #тест года
print(convert_seconds(86400)) #тест днеё
print(convert_seconds(3600)) #тест часов
print(convert_seconds(60)) #тест минут
print(convert_seconds(1234567890)) #общий тест
Вывод:
1 год 0 день 0 час 0 минута 0 секунда
0 год 1 день 0 час 0 минута 0 секунда
0 год 0 день 1 час 0 минута 0 секунда
0 год 0 день 0 час 1 минута 0 секунда
39 год 53 день 23 час 31 минута 30 секунда
Так как задачи в основном стоят гораздо глобальнее, мы можем всё это обернуть в класс и задать методы для вывода в различные системы счисления времени, например вот так:
import datetime
class TimeConverter:
@staticmethod
def toYear(seconds):
return seconds // 31536000
@staticmethod
def toDayInYear(seconds):
return (seconds // 86400) % 365
@staticmethod
def toHourInDay(seconds):
return (seconds // 3600) % 24
@staticmethod
def toMinuteInHour(seconds):
return (seconds // 60) % 60
@staticmethod
def toSecondInMinute(seconds):
return seconds % 60
# Пример использования
seconds = 1234567890
# Выводит количество лет
print(TimeConverter.toYear(seconds))
# Выводит количество дней в контексте одного года
print(TimeConverter.toDayInYear(seconds))
# Выводит количество часов в контексте одного дня
print(TimeConverter.toHourInDay(seconds))
# Выводит количество минут в контексте одного часа
print(TimeConverter.toMinuteInHour(seconds))
# Выводит количество секунд в контексте одной минуты
print(TimeConverter.toSecondInMinute(seconds))
Вывод:
39
53
23
31
30
P.S. данный код не учитывает високосные года
Автор решения: vadim vaduxa
→ Ссылка
В примере выше был import datetime, которым не воспользовались, способ просто ради разнообразия
import datetime
def qwe(s):
x = str(datetime.timedelta(seconds=s)).split(',')
yield from x[-1].split(':')
yield from [0, 0] if len(x) == 1 else divmod(int(x[0].split()[0]), 365)
tostr = lambda r: '{3} год {4} день {0} час {1} минута {2} секунда'.format(*r)
print(tostr(qwe(60))) # 0 год 0 день 0 час 01 минута 00 секунда
print(tostr(qwe(1234567890))) # 39 год 53 день 23 час 31 минута 30 секунда