티스토리 뷰

문자열 형태로 표현된 날짜 데이터를 파싱하여 소스코드에서 사용할 수 있는 날짜 타입으로 변환하는 파싱 방법에 대해서 알아보자. 파이썬 프로그램을 작성할 때, 사용자로부터 날짜 데이터를 입력 받을 일이 있는데, 사용자가 어떤 값을 입력 할지 모르기 때문에 검증해야 할 필요가 있다.

 

파이썬의 'datetime' 라이브러리를 이용하여 문자열을 파싱하는 방법으로 날짜 포맷을 검증할 수 있다.

 

다음 코드를 보자.

import datetime

date_string = '20191101'
date_format = '%Y%m%d'

try:
    date_obj = datetime.datetime.strptime(date_string, date_format)
    print(date_obj)
except ValueError:
    print("Incorrect data format, should be YYYYMMDD")

날짜를 표현하는 문자열이 담겨있는 date_string 변수를 date_format에 담겨있는 포맷에 맞게 파싱한다. 이 코드를 실행하면 다음과 같은 결과를 얻을 수 있다.

date_string 변수에 정합성이 맞지 않는 '20191301' 같은 문자열을 할당하면 "Incorrect data format, should be YYYYMMDD"이 화면에 출력된다. 즉, ValueError 예외를 통해서 날짜를 표현하는 문자열을 검증할 수 있다.

 

날짜 포맷 디렉티브

파이썬 프로그램에서 사용할 날짜 포맷을 지정하기 위해서 다음 표의 디렉티브들을 사용할 수 있다. strptime() 메소드는 다음 디렉티브를 특별한 의미로 해석한다.

Directive 의미 예시
%a 간략한 요일 이름

Sun, Mon, ..., Sat (en_US, 영어)

So, Mo, ..., Sa (de_DE, 독일어)

%A 긴 요일 이름

Sunday, Monday, ... , Satureday (en_US, 영어)

Sonntag, Montag, ... , Samstag (de_DE, 독일어)

%w 번호로 표현된 요일 0 (Sunday), 1 (Monday), ... , 6 (Saturday)
%d 해당 월의 일자 (0으로 패딩) 01, 02, 03, ... , 31
%b 간략한 월 이름

Jan, Feb, ..., Dec (en_US)

Jan, Feb, ..., Dez (de_DE)

%B 긴 월 이름

January, February, ... , December (en_US)

Januar, Februar, ..., Dezember (de_DE)

%m 해당 년도의 숫자로 표현된 월 (0으로 패딩) 01, 02, ..., 12
%y 두 자리로 표현된 년도 00, 01, ..., 99
%Y 전체 년도 1999, 2000, ..., 2019
%H 0으로 패딩된 24시간 00, 01, ..., 23
%I 0으로 패딩된 12시간 01, 02, ..., 12
%p 오전 오후 표현

AM / PM (en_US)

am, pm (de_DE)

%M 0으로 패딩된 분 00, 01, ..., 59
%S 0으로 패딩된 초 00, 01, ..., 59
%f 0으로 패딩된 마이크로 초 000000, 000001, ..., 999999
%z UTC 기준 +HHMM, -HHMM 오프셋 +0000, -0400, +1130
%Z 타임존 이름 UTC, EST, CST
%j 오늘이 이번년도에 몇 번째 날인지 (0으로 패딩) 001, 002, ..., 366
%U

이번주가 이번년도의 몇 번째 주인지(0으로 패딩)

이번 년도의 첫 번째 일요일이 00번째 주로 표현

00, 01, ..., 53
%W

이번주가 이번년도의 몇 번째 주인지(0으로 패딩)

이번 년도의 첫 번째 월요일이 00번째 주로 표현

00, 01, ..., 53
%c 로케일 기준 Date/Time 표현 Fri Nov 12 17:30:00 2019 (en_US)
%x 로케일 기준 Date 표현 01/11/2019 (en_US)
%X 로케일 기준 Time 표현 11:30:00 (en_US)
%% '%' 문자 표현 %

이 디렉티브를 이용해서 날짜 포맷을 적당하게 지정하면 된다.

댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
1,455
Today
0
Yesterday
21
링크
«   2020/02   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
글 보관함