HOWTO · Python
Python에서 두 날짜 비교
이 튜토리얼은 파이썬에서 두 날짜를 비교하고 어떤 날짜가 더 큰지 확인할 수있는 방법을 보여줍니다.
이 페이지의 내용
두 값의 형식이 서로 호환되면 Python 비교 연산자로 비교할 수 있습니다. date 비교는 달력 날짜의 순서를 따르고, datetime 비교는 시각도 고려합니다. date와 datetime은 서로 직접 순서를 비교할 수 없습니다. 같은 형식끼리 비교하거나, 두 값을 공통 표현으로 의도적으로 변환한 뒤 비교하세요. 문자열은 비교 전에 파싱하고, 경과 시간을 구하려면 날짜와 시각이 있는 값끼리 뺍니다. 예를 들어 예약 시스템에서는 요청 날짜와 예약 날짜를 비교해 어느 날짜가 앞서는지 또는 충돌이 있는지 확인할 수 있습니다.
비교 연산자로 date 객체 비교
시각을 고려하지 않고 달력 날짜를 비교하려면 datetime 모듈에서 date 클래스를 가져옵니다. <, >, <=, >=, ==, != 연산자는 연도, 월, 일을 시간순으로 비교합니다. 예를 들어 6월 29일은 6월 9일보다 늦습니다. 불리언 식은 Python이 이 순서를 확인하도록 합니다.
다음 예제를 실행하세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from datetime import date
start = date(2023, 6, 9)
end = date(2023, 6, 29)
print(end > start)
True
예제는 True를 출력하며, 6월 29일이 6월 9일보다 늦다는 뜻입니다. 납기일이 지났는지 확인하는 것처럼 달력 날짜만 중요할 때는 date를 사용하세요. 두 피연산자 모두 date 값이어야 합니다. date를 datetime과 직접 순서 비교하지 마세요. Python에서 순서 비교를 하려면 피연산자 형식이 호환되어야 합니다. 같은 형식끼리 비교하거나 두 값을 공통 표현으로 의도적으로 변환하세요. "2023-06-29" 같은 문자열도 비교만으로 자동 변환되지 않습니다.
시각이 중요할 때 datetime 객체 비교
시각이 결과에 영향을 줘야 한다면 datetime 클래스를 사용합니다. 비교에는 날짜와 시각 필드가 모두 포함되므로, 같은 달력 날짜에 속한 두 값도 시, 분 및 더 작은 단위에 따라 순서가 달라질 수 있습니다. 다음 값은 같은 날이지만 오후 4시 30분이 오전 9시보다 늦습니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from datetime import datetime
morning = datetime(2023, 6, 29, 9, 0)
afternoon = datetime(2023, 6, 29, 16, 30)
print(afternoon > morning)
True
예제는 True를 출력합니다. 시간대 정보가 없는 순진한(naive) datetime 값은 다른 순진한 값과 비교할 수 있습니다. 시간대 정보가 있는(aware) 값을 비교할 때는 서로 호환되는 시간대 정보를 사용하세요. Python은 순진한 datetime과 시간대 정보가 있는 datetime의 순서 비교를 허용하지 않습니다. 비교하기 전에 값을 공통 시간대 정책에 맞게 정규화하세요. 같은 날의 서로 다른 시각을 동일하게 취급해야 한다면 date를 선택하세요.
time.strptime()으로 날짜 문자열 파싱
텍스트로 된 날짜를 비교하려면 먼저 형식을 알아야 합니다. time.strptime() 함수는 지정한 형식에 따라 문자열을 파싱해 struct_time을 반환합니다. 이렇게 파싱한 튜플은 시간순으로 비교할 수 있습니다. 아래 형식은 일/월/연도 입력에 맞으므로 %d/%m/%Y는 30/11/2020을 2020년 11월 30일로 읽습니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import time
first_text = "30/11/2020"
second_text = "12/10/2019"
first_date = time.strptime(first_text, "%d/%m/%Y")
second_date = time.strptime(second_text, "%d/%m/%Y")
print(first_date > second_date)
True
예제는 True를 출력합니다. 연도, 월, 일 필드를 기준으로 파싱된 첫 번째 날짜가 두 번째 날짜보다 늦다는 뜻입니다. 형식 문자열은 입력과 정확히 일치해야 합니다. %m/%d/%Y를 사용하면 날짜 순서가 달라집니다. 문자열의 문자 순서가 달력 날짜의 순서와 일치하지 않을 수 있으므로 날짜 문자열을 그대로 비교해 시간순을 판단하지 마세요. 입력 형식이 다양하거나 시간대 처리가 필요하다면 적절한 datetime 표현으로 파싱하세요.
timedelta로 날짜 간격 비교
한 date에서 다른 date를 빼거나, 서로 호환되는 datetime끼리 빼면 timedelta가 만들어집니다. 이는 날짜가 아니라 경과 시간 간격입니다. 시간이 충분히 지났는지 확인하려면 그 간격을 다른 timedelta와 비교하고, 어느 날짜가 먼저인지 확인하려면 원래 날짜에 비교 연산자를 사용하세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from datetime import date, timedelta
start = date(2023, 6, 9)
end = date(2023, 6, 29)
elapsed = end - start
print(elapsed > timedelta(days=7))
True
예제는 True를 출력합니다. 뺄셈 결과는 20일 간격이며, 이는 7일 기준보다 큽니다. timedelta는 일, 초, 분, 시간, 주 등의 단위를 받습니다. 기간을 나타내며 길이가 달라지는 달력상의 월이나 연도를 계산하지는 않습니다. 두 datetime 사이의 간격을 구할 때는 뺄셈 전에 두 값이 동일한 시간대 인식 및 시간대 규칙을 따르는지 확인하세요.