Python strptime() 완전 정복: 문자열을 datetime 객체로 정확하게 파싱하기
Python strptime(): 문자열을 datetime 객체로 변환
이 가이드에서는 Python의 datetime.strptime() 메서드를 사용하여 문자열로부터 datetime 객체를 생성하는 방법을 실용적인 예제와 포괄적인 형식 코드 참조와 함께 보여줍니다.
동영상: Python에서 날짜와 시간 다루기
공식 Python 튜토리얼을 시청하여 datetime 처리에 대한 이해를 높이세요.
strptime() 메서드는 지정된 형식을 따르는 문자열로부터 datetime 객체를 생성합니다.
참고: 모든 문자열을 파싱할 수 있는 것은 아니며, 입력은 형식 코드와 정확히 일치해야 합니다.
예제 1: 간단한 날짜 문자열 변환
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
print("date_string 타입 =", type(date_string))
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
print("date_object 타입 =", type(date_object))
프로그램을 실행하면 출력은 다음과 같습니다:
date_string = 21 June, 2018
date_string 타입 = <class 'str'>
date_object = 2018-06-21 00:00:00
date_object 타입 = <class 'datetime.datetime'>
strptime() 작동 방식
strptime() 클래스 메서드는 두 개의 인수를 받습니다:
- 파싱할 문자열
- 문자열의 레이아웃을 설명하는 형식 코드
이 입력을 바탕으로 메서드는 동일한 시점을 나타내는 datetime 객체를 반환합니다.
위 예제에서 형식 코드 %d %B, %Y는 다음을 의미합니다:
%d – 제로 패딩된 월별 일(01-31)
%B – 전체 월 이름(1월-12월)
%Y – 4자리 연도
예제 2: 모호한 날짜 파싱
from datetime import datetime
dt_string = "12/11/2018 09:15:32" # 일/월/년 형식 가정
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# 월/일/년 형식 가정
dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S")
print("dt_object2 =", dt_object2)
프로그램 출력은 다음과 같습니다:
dt_object1 = 2018-11-12 09:15:32
dt_object2 = 2018-12-11 09:15:32
전체 형식 코드 목록
아래 표는 strptime()에서 사용할 수 있는 모든 지시자를 요약합니다. 전체 문서는 Python 공식 datetime 모듈 가이드를 참조하세요.
| 지시자 | 의미 | 예시 |
%a | 줄임 요일 이름 | Sun, Mon, ... |
%A | 전체 요일 이름 | Sunday, Monday, ... |
%w | 요일(십진수) | 0, 1, ..., 6 |
%d | 월별 일(제로 패딩) | 01, 02, ..., 31 |
%-d | 월별 일(패딩 없음) | 1, 2, ..., 30 |
%b | 줄임 월 이름 | Jan, Feb, ..., Dec |
%B | 전체 월 이름 | January, February, ... |
%m | 월 번호(제로 패딩) | 01, 02, ..., 12 |
%-m | 월 번호(패딩 없음) | 1, 2, ..., 12 |
%y | 세기 없는 연도(제로 패딩) | 00, 01, ..., 99 |
%-y | 세기 없는 연도(패딩 없음) | 0, 1, ..., 99 |
%Y | 세기 포함 연도 | 2013, 2019, ... |
%H | 시간(24시간제, 제로 패딩) | 00, 01, ..., 23 |
%-H | 시간(24시간제, 패딩 없음) | 0, 1, ..., 23 |
%I | 시간(12시간제, 제로 패딩) | 01, 02, ..., 12 |
%-I | 시간(12시간제, 패딩 없음) | 1, 2, ..., 12 |
%p | 로케일의 AM/PM | AM, PM |
%M | 분(제로 패딩) | 00, 01, ..., 59 |
%-M | 분(패딩 없음) | 0, 1, ..., 59 |
%S | 초(제로 패딩) | 00, 01, ..., 59 |
%-S | 초(패딩 없음) | 0, 1, ..., 59 |
%f | 마이크로초(제로 패딩) | 000000 – 999999 |
%z | UTC 오프셋(+HHMM 또는 –HHMM) | |
%Z | 시간대 이름 | |
%j | 연중 일(제로 패딩) | 001, 002, ..., 366 |
%-j | 연중 일(패딩 없음) | 1, 2, ..., 366 |
%U | 주 번호(일요일 우선) | 00, 01, ..., 53 |
%W | 주 번호(월요일 우선) | 00, 01, ..., 53 |
%c | 로케일의 날짜 및 시간 | Mon Sep 30 07:06:05 2013 |
%x | 로케일의 날짜 | 09/30/13 |
%X | 로케일의 시간 | 07:06:05 |
%% | 리터럴 퍼센트 기호 | % |
흔한 오류: ValueError
문자열과 형식 코드가 일치하지 않으면 strptime()은 ValueError를 발생시킵니다. 예를 들어:
from datetime import datetime
date_string = "12/11/2018" # 잘못된 형식 – 일 월 년 예상
date_object = datetime.strptime(date_string, "%d %m %Y")
print("date_object =", date_object)
이 코드를 실행하면:
ValueError: time data '12/11/2018' does not match format '%d %m %Y'
추천 읽기: Python strftime()