문자열로 표현된 날짜 데이터를 다뤄야 할 경우가 있습니다. 문자열을 파싱해서 Date 객체로 만드는 방법에 대해서 알아보겠습니다.
파이썬에서는 'datetime' 라이브러리를 제공하고 있습니다. 'datetime' 라이브러리를 이용하면 문자열을 파싱하여 날짜 포맷에 맞는지 확인하고 해당하는 날짜 객체를 가져올 수 있습니다.
'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 변수를 %Y%m%d 포맷에 맞게 파싱하는 예제코드입니다. 이코드를 실행하면
$ python test.py
2019-11-01 00:00:00
이 결과를 얻을 수 있습니다.
만약 형식에 맞지 않은 날짜를 파싱하면 ValueError가 발생합니다. 예를 들어 20201301 같이 존재하지 않은 13월을 명시하면 파싱할 수 없어 "Incorrect data format, should be YYYYMMDD"이 화면에 출력됩니다.
날짜 포맷 디렉티브
파이썬 프로그램에서 사용할 날짜 포맷을 지정하기 위해서 다음과 같은 디렉티브들을 사용할 수 있습니다. 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) |
%% | '%' 문자 표현 | % |
이 디렉티브를 이용해서 날짜 포맷을 적당하게 지정하면 됩니다.
댓글