Как конвертировать секунды в часы, минуты и секунды?
У меня есть функция, которая возвращает информацию в секундах, но мне нужно сохранить эти данные в формате часы:минуты:секунды.
Существует ли простой способ преобразовать секунды в этот формат на Python?
5 ответ(ов)
Вот мой быстрый трюк:
from humanfriendly import format_timespan
secondsPassed = 1302
formatted_time = format_timespan(secondsPassed)
print(formatted_time) # '21 minutes and 42 seconds'
Для получения дополнительной информации посетите: https://humanfriendly.readthedocs.io/en/latest/api.html#humanfriendly.format_timespan
Использование datetime
:
С форматом ':0>8'
:
from datetime import timedelta
"{:0>8}".format(str(timedelta(seconds=66)))
# Результат: '00:01:06'
"{:0>8}".format(str(timedelta(seconds=666777)))
# Результат: '7 days, 17:12:57'
"{:0>8}".format(str(timedelta(seconds=60*60*49+109)))
# Результат: '2 days, 1:01:49'
Без формата ':0>8'
:
"{}".format(str(timedelta(seconds=66)))
# Результат: '00:01:06'
"{}".format(str(timedelta(seconds=666777)))
# Результат: '7 days, 17:12:57'
"{}".format(str(timedelta(seconds=60*60*49+109)))
# Результат: '2 days, 1:01:49'
Использование time
:
from time import gmtime
from time import strftime
# ПРИМЕЧАНИЕ: Следующее сбрасывается, если превышает 23:59:59!
strftime("%H:%M:%S", gmtime(125))
# Результат: '00:02:05'
strftime("%H:%M:%S", gmtime(60*60*24-1))
# Результат: '23:59:59'
strftime("%H:%M:%S", gmtime(60*60*24))
# Результат: '00:00:00'
strftime("%H:%M:%S", gmtime(666777))
# Результат: '17:12:57'
# Неверно
Таким образом, если вы хотите форматировать временные интервалы, то использование библиотеки datetime
более предпочтительно, так как позволяет работать с большими временными промежутками и выводить их в удобочитаемом формате.
Вот рабочий вариант функции, который решает задачу преобразования секунд в часы, минуты и секунды:
def sec_to_hours(seconds):
a = str(seconds // 3600) # вычисляем часы
b = str((seconds % 3600) // 60) # вычисляем минуты
c = str((seconds % 3600) % 60) # вычисляем секунды
d = ["{} hours {} mins {} seconds".format(a, b, c)] # форматируем строку
return d
print(sec_to_hours(10000))
# ['2 hours 46 mins 40 seconds']
print(sec_to_hours(60*60*24 + 105))
# ['24 hours 1 mins 45 seconds']
Эта функция принимает количество секунд и возвращает список с одной строкой, в которой указано количество часов, минут и секунд, составленных из переданного значения. Например, для 10000
секунд она вернёт ['2 hours 46 mins 40 seconds']
.
Вот немного не по теме, но возможно оказаться полезным кому-то.
Функция time_format
принимает целое число секунд и возвращает строку с форматированием, в зависимости от величины времени. Если переданное значение не равно None
, оно преобразуется в целое число. Далее происходит расчет количества дней, часов, минут и секунд. В зависимости от того, какое значение больше нуля, функция возвращает отформатированную строку:
def time_format(seconds: int) -> str:
if seconds is not None:
seconds = int(seconds)
d = seconds // (3600 * 24)
h = seconds // 3600 % 24
m = seconds % 3600 // 60
s = seconds % 3600 % 60
if d > 0:
return '{:02d}D {:02d}H {:02d}m {:02d}s'.format(d, h, m, s)
elif h > 0:
return '{:02d}H {:02d}m {:02d}s'.format(h, m, s)
elif m > 0:
return '{:02d}m {:02d}s'.format(m, s)
elif s > 0:
return '{:02d}s'.format(s)
return '-'
Примеры использования:
print(time_format(25*60*60 + 125))
>>> 01D 01H 02m 05s
print(time_format(17*60*60 + 35))
>>> 17H 00m 35s
print(time_format(3500))
>>> 58m 20s
print(time_format(21))
>>> 21s
Эта функция может быть полезна для отображения временных значений в более читаемом формате.
В этом коде реализована функция hms
, которая преобразует количество секунд в формат "часы:минуты:секунды".
Часы (h) вычисляются с помощью целочисленного деления (//) общего количества секунд на 3600 (так как в одном часе 3600 секунд).
h = seconds // 3600
Минуты (m) вычисляются, сначала получая остаток от деления на 3600, а затем целочисленно деля его на 60 (в одном minuto 60 секунд).
m = seconds % 3600 // 60
Секунды (s) определяются как остаток от операций, проведенных для получения часов и минут. То есть, мы сначала находим остаток от деления на 3600, а после находим остаток от дележа на 60.
s = seconds % 3600 % 60
В конце функция возвращает отформатированную строку, где часы, минуты и секунды представлены в виде двузначных чисел с ведущими нулями.
Пример использования функции:
print(hms(7500)) # Должен вывести 02:05:00
Обратите внимание, что формат вывода вы можете изменить в строке форматирования, если вам необходимо другое представление времени.
Существует ли список временных зон Pytz?
Преобразование строки unix timestamp в читаемую дату
Как преобразовать datetime в date?
Получение текущей даты в формате YYYY-MM-DD в Python
Как получить день недели по заданной дате?