초를 시간, 분, 초로 변환하려면 어떻게 해야 합니까?
초단위로 정보를 반환하는 기능이 있는데, 그 정보를 시간:분:초단위로 저장해야 합니다.
Python에서 초수를 이 형식으로 쉽게 변환할 수 있는 방법이 있나요?
다음 기능을 사용할 수 있습니다.
>>> import datetime
>>> str(datetime.timedelta(seconds=666))
'0:11:06'
하나의 나눗셈만 수행하여 몫과 나머지를 모두 생성하는 함수를 사용하면 두 가지 수학적 연산만으로 매우 빠르게 결과를 얻을 수 있습니다.
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을 참조하십시오.
나는 다음 세트가 효과가 있었다.
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']
이렇게 얻었어요.
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']
(h) 3600초(60분/시*60초/분)의 플로어 나눗셈(//)으로 계산된 시간
60(60초/분)으로 남은 초수를 바닥 분할하여 계산한 분(시간 계산에서 백분율로 계산함)
마찬가지로 시간 및 분 단위의 나머지 계산에 의한 초수입니다.
나머지는 문자열 형식일 뿐입니다!
def hms(seconds):
h = seconds // 3600
m = seconds % 3600 // 60
s = seconds % 3600 % 60
return '{:02d}:{:02d}:{:02d}'.format(h, m, s)
print(hms(7500)) # Should print 02h05m00s
필요한 경우datetime.time
value, 다음 트릭을 사용할 수 있습니다.
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()
대신1
0보다 큰 숫자를 사용할 수 있습니다.여기에서는, 라고 하는 사실을 사용합니다.datetime.fromordinal
항상 돌아온다datetime
에 이의를 제기하다.time
컴포넌트가 제로입니다.
주제에서 벗어난 답변이지만 누군가에게 유용할 수 있습니다.
def time_format(seconds: int):
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
dateutil.relativedelta
플로트로서 시간, 분, 초에 액세스 할 필요가 있는 경우 편리합니다. datetime.timedelta
는 같은 인터페이스를 제공하지 않습니다.
from dateutil.relativedelta import relativedelta
rt = relativedelta(seconds=5440)
print(rt.seconds)
print('{:02d}:{:02d}:{:02d}'.format(
int(rt.hours), int(rt.minutes), int(rt.seconds)))
인쇄물
40.0
01:30:40
초를 60으로 나누면 분수를 얻을 수 있습니다.
import time
seconds = time.time()
minutes = seconds / 60
print(minutes)
다시 60으로 나누면 시간이 나온다.
저 같은 경우에는 포맷을 하고 싶었습니다.HH:MM:SS.ff"를 선택합니다.이렇게 해결했습니다.
timestamp = 28.97000002861023
str(datetime.fromtimestamp(timestamp)+timedelta(hours=-1)).split(' ')[1][:12]
'00:00:28.970'
위의 솔루션은 날짜의 "자정 이후"에 대한 단일 값을 HH를 사용하여 날짜/시간 개체 또는 문자열로 변환하려는 경우 작동합니다.하지만 이 페이지를 접하게 된 건 판다의 데이터 프레임 열 전체를 보고 싶었기 때문입니다.한 번에 하나의 가치 이상으로 이 작업을 수행하는 방법을 궁금해 하는 사람이 있다면, 다음과 같은 이점이 있습니다.
mydate='2015-03-01'
df['datetime'] = datetime.datetime(mydate) + \
pandas.to_timedelta(df['seconds_since_midnight'], 's')
제가 항상 사용하는 방법은 다음과 같습니다. (아무리 비효율적이더라도)
seconds = 19346
def zeroes (num):
if num < 10: num = "0" + num
return num
def return_hms(second, apply_zeroes):
sec = second % 60
min_ = second // 60 % 60
hrs = second // 3600
if apply_zeroes > 0:
sec = zeroes(sec)
min_ = zeroes(min_)
if apply_zeroes > 1:
hrs = zeroes(hrs)
return "{}:{}:{}".format(hrs, min_, sec)
print(return_hms(seconds, 1))
★★★★★★★★★★★★★5:22:26
return_hms() 함수의 구문
return_hms()
함수는 다음과 같이 사용됩니다.
첫 번째 변수(두 번째 변수)는 h:m:s로 변환하는 초수입니다.
두 번째 변수(apply_zeroes)는 포맷입니다.
0 이하: 0은 일절 적용하지 않습니다.
1: 10분 미만일 때 분, 초에 0을 적용합니다.
2개 이상: 10시간 미만일 경우 임의의 값(시간 포함)에 0을 적용합니다.
다음은 현재 시간을 읽고 시간, 분, 초 단위로 시간으로 변환하는 간단한 프로그램입니다.
import time as tm #import package time
timenow = tm.ctime() #fetch local time in string format
timeinhrs = timenow[11:19]
t=tm.time()#time.time() gives out time in seconds since epoch.
print("Time in HH:MM:SS format is: ",timeinhrs,"\nTime since epoch is : ",t/(3600*24),"days")
출력은
Time in HH:MM:SS format is: 13:32:45
Time since epoch is : 18793.335252338384 days
난 여기 있는 모든 답을 찾아봤지만 여전히 내 답을 시도했다.
def a(t):
print(f"{int(t/3600)}H {int((t/60)%60) if t/3600>0 else int(t/60)}M {int(t%60)}S")
결과:
>>> a(7500)
2H 5M 0S
>>> a(3666)
1H 1M 6S
Python: 3.8.8
division = 3623 // 3600 #to hours
division2 = 600 // 60 #to minutes
print (division) #write hours
print (division2) #write minutes
추신 내 코드가 프로답지 않다
언급URL : https://stackoverflow.com/questions/775049/how-do-i-convert-seconds-to-hours-minutes-and-seconds
'source' 카테고리의 다른 글
메이븐 빌드에서 junit 테스트를 병렬로 실행하고 있습니까? (0) | 2022.12.13 |
---|---|
SQL 트리거에서 삽입에 열 값이 포함되어 있는지 확인합니다. (0) | 2022.12.13 |
jQuery UI 정렬 가능, 데이터베이스에 순서 쓰기 (0) | 2022.12.13 |
MySQL 저속 쿼리 로그를 활성화하려면 어떻게 해야 합니까? (0) | 2022.12.03 |
JavaScript에서 개체의 속성별로 인덱스를 가져오려면 어떻게 해야 합니까? (0) | 2022.12.03 |