Python에서 초를 hh : mm : ss로 변환
이 질문에 이미 답변이 있습니다.
int (초)를 mm : ss 또는 hh : mm : ss 형식으로 어떻게 변환 합니까?
Python 코드로이 작업을 수행해야합니다 (가능하면 Django 템플릿에서).
나는 많은 답변 중 어떤 것도 내가 생각하는 "한 가지 명백한 방법"을 제공한다는 것을 믿을 수 없다 (그리고 나는 네덜란드어도 아니다 ...!-)-최대 24 시간 분량의 초 (특히 86399 초) :
>>> import time
>>> time.strftime('%H:%M:%S', time.gmtime(12345))
'03:25:45'
Django 템플릿에서 수행하는 것은 time
필터가 펑키 한 시간 형식 지정 구문 (PHP에서 영감을받은)을 지원하고 데이터를 준비하기 위해 datetime 모듈과 pytz와 같은 시간대 구현이 필요하기 때문에 더 까다 롭습니다. 예를 들면 :
>>> from django import template as tt
>>> import pytz
>>> import datetime
>>> tt.Template('{{ x|time:"H:i:s" }}').render(
... tt.Context({'x': datetime.datetime.fromtimestamp(12345, pytz.utc)}))
u'03:25:45'
정확한 요구 사항에 따라 앱에서이 서식 지정 작업에 대한 사용자 지정 필터를 정의하는 것이 더 편리 할 수 있습니다.
>>> a = datetime.timedelta(seconds=65)
datetime.timedelta(0, 65)
>>> str(a)
'0:01:05'
요청 된 작업을 수행하는 코드, 예제 및 그가 지정하지 않은 케이스 처리 방법을 보여주는 코드 :
def format_seconds_to_hhmmss(seconds):
hours = seconds // (60*60)
seconds %= (60*60)
minutes = seconds // 60
seconds %= 60
return "%02i:%02i:%02i" % (hours, minutes, seconds)
def format_seconds_to_mmss(seconds):
minutes = seconds // 60
seconds %= 60
return "%02i:%02i" % (minutes, seconds)
minutes = 60
hours = 60*60
assert format_seconds_to_mmss(7*minutes + 30) == "07:30"
assert format_seconds_to_mmss(15*minutes + 30) == "15:30"
assert format_seconds_to_mmss(1000*minutes + 30) == "1000:30"
assert format_seconds_to_hhmmss(2*hours + 15*minutes + 30) == "02:15:30"
assert format_seconds_to_hhmmss(11*hours + 15*minutes + 30) == "11:15:30"
assert format_seconds_to_hhmmss(99*hours + 15*minutes + 30) == "99:15:30"
assert format_seconds_to_hhmmss(500*hours + 15*minutes + 30) == "500:15:30"
이것을 int가 아닌 timedelta로 저장할 수 있고 저장해야 할 수도 있지만 이것은 별도의 문제이며 timedelta는 실제로이 특정 작업을 더 쉽게 만들지 않습니다.
datetime 모듈을 읽어보십시오 .
SilentGhost의 답변에는 내 답변이 누락되어 여기에 다시 게시됩니다.
>>> a = datetime.timedelta(seconds=65)
datetime.timedelta(0, 65)
>>> str(a)
'0:01:05'
간단한 나눗셈으로 초 수에서 분 및 시간 수를 계산할 수 있습니다.
seconds = 12345
minutes = seconds // 60
hours = minutes // 60
print "%02d:%02d:%02d" % (hours, minutes % 60, seconds % 60)
print "%02d:%02d" % (minutes, seconds % 60)
다음 //
은 Python의 정수 나눗셈입니다.
divmod를 사용하면 다양한 정수 나눗셈에 영향을받지 않습니다.
# show time strings for 3800 seconds
# easy way to get mm:ss
print "%02d:%02d" % divmod(3800, 60)
# easy way to get hh:mm:ss
print "%02d:%02d:%02d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(3800,),60,60])
# function to convert floating point number of seconds to
# hh:mm:ss.sss
def secondsToStr(t):
return "%02d:%02d:%02d.%03d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(t*1000,),1000,60,60])
print secondsToStr(3800.123)
인쇄물:
63:20
01:03:20
01:03:20.123
60으로 나눌 때주의하십시오. 정수 간 나누기는 미래에서 나누기를 가져 오지 않는 한 정수-> 12/60 = 0을 반환합니다. 다음은 Python 2.6.2에서 복사하여 붙여 넣은 것입니다.
IDLE 2.6.2
>>> 12/60
0
>>> from __future__ import division
>>> 12/60
0.20000000000000001
이 작업을 많이 수행해야하는 경우 하루에 몇 초 동안 가능한 모든 문자열을 미리 계산할 수 있습니다.
try:
from itertools import product
except ImportError:
def product(*seqs):
if len(seqs) == 1:
for p in seqs[0]:
yield p,
else:
for s in seqs[0]:
for p in product(*seqs[1:]):
yield (s,) + p
hhmmss = []
for (h, m, s) in product(range(24), range(60), range(60)):
hhmmss.append("%02d:%02d:%02d" % (h, m, s))
이제 초를 형식 문자열로 변환하는 것은 빠른 색인 조회입니다.
print hhmmss[12345]
인쇄물
'03:25:45'
Python이 날짜와 시간을 지원한다는 사실 외에도 (bigmattyh의 응답 참조) 몇 분 또는 몇 시간을 초에서 쉽게 찾을 수 있습니다.
minutes = seconds / 60
hours = minutes / 60
이제 분이나 초를 표시하고 싶을 때 59보다 크지 않도록 60으로 MOD
Not being a Python person, but the easiest without any libraries is just:
total = 3800
seconds = total % 60
total = total - seconds
hours = total / 3600
total = total - (hours * 3600)
mins = total / 60
ReferenceURL : https://stackoverflow.com/questions/1384406/convert-seconds-to-hhmmss-in-python
'IT TIP' 카테고리의 다른 글
Ruby on Rails의 '뒤로'브라우저 작업 (0) | 2020.12.31 |
---|---|
스토리 보드와 기존 XIB 방식 (0) | 2020.12.31 |
내부 예외를 확인하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.31 |
sqldatetime.minvalue를 datetime으로 변환하는 방법은 무엇입니까? (0) | 2020.12.31 |
프로그래밍 방식으로 특정 연락처에 텍스트 보내기 (whatsapp) (0) | 2020.12.31 |