개요
이 글에서는 초 단위로 주어진 시간을 '시:분:초' 형식으로 변환하는 파이썬 프로그램을 다룹니다.
문제 정의: 초 단위의 시간 값이 주어졌을 때, 이를 시(hour), 분(minute), 초(second)로 구성된 읽기 쉬운 형태로 변환해야 합니다.
이 문제는 크게 세 가지 방법으로 해결할 수 있습니다.
방법 1: 나눗셈 연산을 이용한 직접 계산
가장 기본적인 방식으로, 몫 연산자(//)와 나머지 연산자(%)를 활용해 각 단위를 직접 계산합니다. 외부 모듈 없이 동작하며, 로직을 명확하게 이해할 수 있다는 장점이 있습니다.
예제 코드
def convert(seconds):
seconds = seconds % (24 * 3600) # 24시간을 넘는 값 제거
hour = seconds // 3600 # 시 계산
seconds %= 3600 # 남은 초
minutes = seconds // 60 # 분 계산
seconds %= 60 # 남은 초
return "%02d:%02d:%02d" % (hour, minutes, seconds) # 두 자리 형식 지정
n = 23451
print(convert(n))출력 결과
06:30:51
%02d 형식 지정자를 사용했기 때문에 한 자리 숫자도 앞에 0이 붙어 두 자리로 출력됩니다.
방법 2: datetime 모듈 활용
표준 라이브러리인 datetime 모듈의 timedelta 객체를 사용하면 단 몇 줄로 변환할 수 있습니다. 코드가 간결하고 가독성이 뛰어납니다.
예제 코드
# datetime 모듈 사용
import datetime
def convert(n):
return str(datetime.timedelta(seconds=n))
n = 23451
print(convert(n))출력 결과
6:30:51
다만 timedelta의 기본 출력은 시(hour) 부분 앞에 0을 채우지 않으므로, 자릿수 고정이 필요하다면 별도 포맷팅이 필요할 수 있습니다.
방법 3: time 모듈 활용
time 모듈의 gmtime() 함수로 초 값을 시간 구조체로 변환한 뒤, strftime()으로 원하는 형식의 문자열을 만들 수 있습니다.
예제 코드
# time 모듈 사용
import time
def convert(seconds):
return time.strftime("%H:%M:%S", time.gmtime(n))
n = 23451
print(convert(n))출력 결과
06:30:51
%H:%M:%S 형식 덕분에 시, 분, 초가 모두 두 자리로 깔끔하게 출력됩니다. 참고로 이 방식은 하루(86,400초)를 넘는 값에 대해서는 일(day) 단위가 반영되지 않으므로, 24시간 미만의 값에 적합합니다.
마무리
이번 글에서는 초를 시, 분, 초로 변환하는 세 가지 방법을 살펴보았습니다. 변환 로직을 직접 이해하고 싶다면 첫 번째 방법이, 간결한 코드가 필요하다면 datetime 또는 time 모듈을 활용하는 것이 좋습니다. 상황에 맞는 방법을 선택해 활용해 보시기 바랍니다.