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

Python에서 날짜 유효성 검사하는 방법 – strptime() 함수 완벽 가이드

Python에서 날짜 유효성 검사를 수행하는 방법은 처리하려는 날짜의 형식에 따라 크게 달라집니다. datetime 라이브러리의 strptime() 함수를 사용하면 문자열을 날짜/시간 객체로 손쉽게 변환할 수 있으며, 지정한 형식과 맞지 않는 문자열이 들어오면 ValueError가 발생하기 때문에 이를 활용해 유효성 검사를 구현할 수 있습니다.

기본 예제

import datetime
date_string = '2017-12-31'
date_format = '%Y-%m-%d'
try:
  date_obj = datetime.datetime.strptime(date_string, date_format)
  print(date_obj)
except ValueError:
  print("잘못된 날짜 형식입니다. YYYY-MM-DD 형식이어야 합니다.")

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

2017-12-31 00:00:00

날짜 문자열이 %Y-%m-%d 형식에 부합하므로 정상적으로 파싱되어 출력됩니다. 만약 '2017-13-31'처럼 존재하지 않는 날짜나 잘못된 형식의 문자열이 입력되면 ValueError가 발생하고, except 블록의 오류 메시지가 출력됩니다.

strptime()에서 지원하는 포맷 지시자

strptime()은 다양한 지시자(directive)를 조합하여 여러 형식의 날짜와 시간을 파싱할 수 있습니다. 아래 표는 자주 사용되는 주요 지시자와 그 의미를 정리한 것입니다.

지시자의미
%a로케일 기준 축약된 요일 이름
%A로케일 기준 전체 요일 이름
%b로케일 기준 축약된 월 이름
%B로케일 기준 전체 월 이름
%c로케일에 적합한 날짜 및 시간 표현
%d일(day)을 10진수로 표시 [01~31]
%H시간(24시간제)을 10진수로 표시 [00~23]
%I시간(12시간제)을 10진수로 표시 [01~12]
%j연중 몇 번째 날인지 10진수로 표시 [001~366]
%m월을 10진수로 표시 [01~12]
%M분을 10진수로 표시 [00~59]
%p로케일 기준 AM 또는 PM 표시
%S초를 10진수로 표시 [00~61]
%U연중 몇 번째 주인지 10진수로 표시 [00~53] (일요일을 한 주의 시작으로 간주하며, 새해 첫 번째 일요일 이전의 날들은 0주로 계산)
%w요일을 10진수로 표시 [0(일요일)~6]
%W연중 몇 번째 주인지 10진수로 표시 [00~53] (월요일을 한 주의 시작으로 간주하며, 새해 첫 번째 월요일 이전의 날들은 0주로 계산)
%x로케일에 적합한 날짜 표현
%X로케일에 적합한 시간 표현
%y세기(year century)를 제외한 연도를 10진수로 표시 [00~99]
%Y세기를 포함한 연도를 10진수로 표시
%Z시간대(time zone) 이름 (시간대 정보가 없으면 빈 문자열)
%%리터럴 '%' 문자 그대로 표시

마무리

이처럼 strptime() 함수와 try-except 문을 조합하면 별도의 외부 라이브러리 없이도 간단하고 확실하게 날짜 유효성 검사를 수행할 수 있습니다. 입력받는 날짜 형식에 맞는 지시자를 지정해 주는 것이 핵심입니다.