[python] 초를시, 분, 초로 어떻게 변환합니까?

초 단위로 정보를 반환하는 함수가 있지만 해당 정보를시 : 분 : 초로 저장해야합니다.

파이썬에서 초를이 형식으로 변환하는 쉬운 방법이 있습니까?



답변

당신은 datetime.timedelta기능 을 사용할 수 있습니다 :

>>> import datetime
>>> str(datetime.timedelta(seconds=666))
'0:11:06'


답변

divmod()몫과 나머지를 모두 생성하기 위해 단일 나누기 만하 는 함수 를 사용하면 두 가지 수학 연산만으로도 결과를 매우 빠르게 얻을 수 있습니다.

m, s = divmod(seconds, 60)
h, m = divmod(m, 60)

그런 다음 문자열 형식 을 사용 하여 결과를 원하는 출력으로 변환하십시오.

print('{:d}:{:02d}:{:02d}'.format(h, m, s)) # Python 3
print(f'{h:d}:{m:02d}:{s:02d}') # Python 3.6+


답변

쉬운 방법으로 이름을 지정할 수는 없지만 (적어도 구문을 기억할 수는 없지만) time.strftime 을 사용 하면 서식을보다 효율적으로 제어 할 수 있습니다.

from time import strftime
from time import gmtime

strftime("%H:%M:%S", gmtime(666))
'00:11:06'

strftime("%H:%M:%S", gmtime(60*60*24))
'00:00:00'

gmtime 은 초를 필요한 특수 튜플 형식으로 변환하는 데 사용됩니다 strftime().

참고 : 23:59:59 이후에 잘립니다.


답변

사용 datetime:

':0>8'형식 :

from datetime import timedelta

"{:0>8}".format(str(timedelta(seconds=66)))
# Result: '00:01:06'

"{:0>8}".format(str(timedelta(seconds=666777)))
# Result: '7 days, 17:12:57'

"{:0>8}".format(str(timedelta(seconds=60*60*49+109)))
# Result: '2 days, 1:01:49'

':0>8'형식이 없으면 :

"{}".format(str(timedelta(seconds=66)))
# Result: '00:01:06'

"{}".format(str(timedelta(seconds=666777)))
# Result: '7 days, 17:12:57'

"{}".format(str(timedelta(seconds=60*60*49+109)))
# Result: '2 days, 1:01:49'

사용 time:

from time import gmtime
from time import strftime

# NOTE: The following resets if it goes over 23:59:59!

strftime("%H:%M:%S", gmtime(125))
# Result: '00:02:05'

strftime("%H:%M:%S", gmtime(60*60*24-1))
# Result: '23:59:59'

strftime("%H:%M:%S", gmtime(60*60*24))
# Result: '00:00:00'

strftime("%H:%M:%S", gmtime(666777))
# Result: '17:12:57'
# Wrong


답변

이것은 나의 빠른 속임수입니다.

from humanfriendly import format_timespan
secondsPassed = 1302
format_timespan(secondsPassed)
# '21 minutes and 42 seconds'

자세한 내용을 보려면 다음 사이트를 방문하십시오 :
https://humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_timespan


답변

datetime.time가치 를 얻으려면 다음과 같은 트릭을 사용할 수 있습니다.

my_time = (datetime(1970,1,1) + timedelta(seconds=my_seconds)).time()

에 추가 timedelta할 수는 없지만에 추가 할 time수 있습니다 datetime.

UPD : 동일한 기술의 또 다른 변형 :

my_time = (datetime.fromordinal(1) + timedelta(seconds=my_seconds)).time()

대신 10보다 큰 숫자를 사용할 수 있습니다. 여기서는 datetime.fromordinal항상 구성 요소가 0 인 datetime객체를 반환 한다는 사실을 사용합니다 time.


답변

이것이 내가 얻은 방법입니다.

def sec2time(sec, n_msec=3):
    ''' Convert seconds to 'D days, HH:MM:SS.FFF' '''
    if hasattr(sec,'__len__'):
        return [sec2time(s) for s in sec]
    m, s = divmod(sec, 60)
    h, m = divmod(m, 60)
    d, h = divmod(h, 24)
    if n_msec > 0:
        pattern = '%%02d:%%02d:%%0%d.%df' % (n_msec+3, n_msec)
    else:
        pattern = r'%02d:%02d:%02d'
    if d == 0:
        return pattern % (h, m, s)
    return ('%d days, ' + pattern) % (d, h, m, s)

몇 가지 예 :

$ sec2time(10, 3)
Out: '00:00:10.000'

$ sec2time(1234567.8910, 0)
Out: '14 days, 06:56:07'

$ sec2time(1234567.8910, 4)
Out: '14 days, 06:56:07.8910'

$ sec2time([12, 345678.9], 3)
Out: ['00:00:12.000', '4 days, 00:01:18.900']