7

Как конвертировать секунды в часы, минуты и секунды?

1

У меня есть функция, которая возвращает информацию в секундах, но мне нужно сохранить эти данные в формате часы:минуты:секунды.

Существует ли простой способ преобразовать секунды в этот формат на Python?

5 ответ(ов)

0

Вот мой быстрый трюк:

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

0

Использование 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 более предпочтительно, так как позволяет работать с большими временными промежутками и выводить их в удобочитаемом формате.

0

Вот рабочий вариант функции, который решает задачу преобразования секунд в часы, минуты и секунды:

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'].

0

Вот немного не по теме, но возможно оказаться полезным кому-то.

Функция 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

Эта функция может быть полезна для отображения временных значений в более читаемом формате.

0

В этом коде реализована функция hms, которая преобразует количество секунд в формат "часы:минуты:секунды".

  1. Часы (h) вычисляются с помощью целочисленного деления (//) общего количества секунд на 3600 (так как в одном часе 3600 секунд).

    h = seconds // 3600
    
  2. Минуты (m) вычисляются, сначала получая остаток от деления на 3600, а затем целочисленно деля его на 60 (в одном minuto 60 секунд).

    m = seconds % 3600 // 60
    
  3. Секунды (s) определяются как остаток от операций, проведенных для получения часов и минут. То есть, мы сначала находим остаток от деления на 3600, а после находим остаток от дележа на 60.

    s = seconds % 3600 % 60
    
  4. В конце функция возвращает отформатированную строку, где часы, минуты и секунды представлены в виде двузначных чисел с ведущими нулями.

Пример использования функции:

print(hms(7500))  # Должен вывести 02:05:00

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь