안녕하세요. 이번 시간에는 파이썬에서 하루 전의 시각을 손쉽게 계산할 수 있게 하는 timedelta에 대해서 알아보겠습니다.

 


 먼저 1번째 예제입니다. 현재 시각을 구한 다음에 timedelta를 이용합니다. 이 클래스는 시각의 차이를 나타내는 클래스입니다. 어떤 인자가 들어가는지는 문서를 참고하시면 됩니다만, 여기에서는 days만 다루도록 하겠습니다. 현재 시각에서 1일만큼의 변화량을 마이너스 했습니다. 그러면 어떻게 되느냐. 하루 전으로 가게 됩니다.

 

 실행 결과를 보겠습니다.

 

 2023년 3월 10일 오전 1시 42분 35초 +09:00이 나오네요. timezone이 있었으니, 이 정보도 같이 유지되어 나옵니다.

 

 

 그러면 date 객체에 대해서도 동작할까요? 2023년 3월 11일에서 하루 전 날짜를 구하고 싶습니다. 이 경우에도 똑같이 하면 됩니다. 4번째 줄에 date 객체 하나를 생성했습니다. 2023년 3월 11일을 나타내는 것입니다. 여기에 timedelta로 1일을 빼 버렸습니다.

 

 그랬더니 2023년 3월 10일이 나오게 되네요.

 

 이를 이용하면 d day를 계산하는 데에도 쉽게 응용할 수 있습니다. 위 예제는 2024년 1월 1일까지 몇 일 남았는지 계산해 줍니다. 오늘 날짜가 3월 11일이고, 내년 1월 1일이 2024년 1월 1일이니 dt에 2024년 1월 1일을, dt2에 2023년 3월 11일을 넣습니다. 이 두 날짜의 차이를 계산하면 됩니다.

 

 days는 날짜의 차이가 x일이다라는 것을 나타냅니다. 날짜 혹은 시각의 차이를 나타내기 위한 클래스가 timedelta이고 여기에 days와 같은 정보가 들어간 셈입니다.

 

 296이 나오게 되는데요. 296일 후면 새해가 된다는 의미입니다.

 


 이제 실전 문제로 들어가 봅시다. 특정 이벤트 1이 최근 하루 전에 일어난 것을 어떻게 검사하면 될까요? 현재 시각은 서울 기준으로 3월 11일 새벽 1시 50분입니다. 주어지는 시각은 timezone 정보가 있다고 가정해 보겠습니다.

 

 이 경우, 현재 시각도 utc로, 주어지는 시각도 utc 기준으로 바꾸면 됩니다. datetime.now(timezone.utc)가 현재 시각을 utc 기준으로 출력해 주는 것입니다. 다음에, 주어진 시각 dt를 함수 astimezone으로 utc 기준으로 바꿔버렸습니다. 그러면 둘 다 utc 기준으로 맞춰집니다. 이제 현재 시각에 하루 전으로 돌아간 시각보다 주어진 시각이 더 크거나 같은지를 보면 되는데요.

 

 하루 전으로 돌아가는 것은 timedelta(days=1)을 빼면 됩니다. 다음에 >= 연산자로 비교해 주면 됩니다.

 

 그러면 True가 나옴을 확인할 수 있습니다.