Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 두 타임스탬프의 차이(초 단위) 계산하기

두 개의 시간이 "Day dd Mon yyyy hh:mm:ss +/-xxxx" 형식으로 주어졌다고 가정해 보겠습니다. 여기서 Day는 첫 글자가 대문자인 세 자리 요일 이름이고, Mon은 세 자리 월 이름입니다. 마지막의 + 또는 - xxxx는 시간대를 나타내며, 예를 들어 +0530은 GMT보다 5시간 30분 앞선 시간임을 의미합니다(나머지 dd, hh, mm, ss 등의 형식은 표기만 봐도 쉽게 이해할 수 있습니다). 이때 두 타임스탬프 사이의 절대 차이를 초 단위로 구하는 것이 목표입니다.

파이썬에서는 datetime 라이브러리를 사용하면 이 문제를 간단하게 해결할 수 있습니다. 핵심은 strptime() 함수인데, 이 함수는 문자열 형태의 날짜를 datetime 객체로 변환해 줍니다. 변환 시에는 아래와 같은 형식 지정자(format specifier)를 활용합니다.

  • %a : 세 글자 형식의 요일 (예: Thu)
  • %d : 숫자 형식의 일(day)
  • %b : 세 글자 형식의 월 (예: Jul)
  • %Y : yyyy 형식의 연도
  • %H : hh 형식의 시(hour)
  • %M : mm 형식의 분(minute)
  • %S : ss 형식의 초(second)
  • %z : +/-xxxx 형식의 시간대(timezone)

예를 들어 입력이 t1 = "Thu 15 Jul 2021 15:10:17 +0530", t2 = "Thu 15 Jul 2021 20:25:29 +0720"이라면 출력 결과는 12312가 됩니다.

문제를 해결하는 절차는 다음과 같습니다.

  • t1 := 첫 번째 시간 문자열을 위의 형식 지정자를 이용해 datetime 객체로 변환
  • t2 := 두 번째 시간 문자열을 같은 방식으로 변환
  • t1과 t2의 차이를 초 단위로 계산하여 절댓값 반환

예제 코드

다음 구현 예제를 통해 더 자세히 이해해 보겠습니다.

from datetime import datetime

def solve(t1, t2):
   t1 = datetime.strptime(t1, "%a %d %b %Y %H:%M:%S %z")
   t2 = datetime.strptime(t2, "%a %d %b %Y %H:%M:%S %z")
   return abs(int((t1-t2).total_seconds()))

t1 = "Thu 15 Jul 2021 15:10:17 +0530"
t2 = "Thu 15 Jul 2021 20:25:29 +0720"
print(solve(t1, t2))

입력

"Thu 15 Jul 2021 15:10:17 +0530", "Thu 15 Jul 2021 20:25:29 +0720"

출력

12312

결과 분석

결과가 어떻게 나오는지 살펴보겠습니다. %z 덕분에 두 datetime 객체는 시간대 정보를 모두 포함하고 있으므로, 서로 다른 시간대라도 단순히 뺄셈만 하면 자동으로 동일 기준(UTC)으로 보정된 차이가 계산됩니다.

  • t1: 15:10:17 (+0530) → UTC 기준 09:40:17
  • t2: 20:25:29 (+0720) → UTC 기준 13:05:29

두 값의 차이는 3시간 25분 12초이며, 이를 초로 환산하면 3×3600 + 25×60 + 12 = 12312초가 됩니다. total_seconds() 메서드는 timedelta 객체를 초 단위 실수로 변환해 주므로, int()abs()를 함께 사용해 정수형 절댓값으로 깔끔하게 반환할 수 있습니다.