달나라 노트

Python datetime : strftime(시간 날짜 데이터를 텍스트로) & strptime(텍스트를 시간 날짜 데이터로) 본문

Python/Python datetime

Python datetime : strftime(시간 날짜 데이터를 텍스트로) & strptime(텍스트를 시간 날짜 데이터로)

CosmosProject 2020. 12. 23. 02:54
728x90
반응형

 

 

 

2020-03-08이라는 날짜를 표현하는 방식은 다양합니다.
2020-03-08이라고 표현할 수도 있으며 2020/03/08, 03/08/2020, 03-08-2020, 08-03-2020 등등 여러 구분기호(-, / etc)와 년, 월, 일의 순서를 변경할 수도 있습니다.
이번 section에서는 이와 같이 날짜, 시간 데이터를 원하는 format에 맞춰 텍스트로 전환하는 방법을 알아보겠습니다.

 

 

import datetime

now = datetime.datetime.now()
print(now)

t0 = now.strftime("&H:%M:%S")
print(t0)

t1 = now.strftime("&H-%M-%S")
print(t1)

t2 = now.strftime("%m/%d/%Y, %H:%M:%S")
print(t2)

t3 = now.strftime("%d-%m-%Y %H:%M:%S")
print(t3)

t4 = now.strftime("%Y-%m-%d %H:%M:%S")
print(t4)
t5 = now.strftime("%y-%m-%d %H:%M:%S")
print(t4)

- Result
2020-03-10 01:13:28.843620
01:13:28
03/10/2020, 01:13:28
10-03-2020 01:13:28
2020-03-10 01:13:28
20-03-10 01:13:28

now 함수에 의해 now라는 변수에 현재 시간이 microseconds까지 입력됩니다.

t0은 now함수에 입력된 2020-03-10 01:13:28.843620 중에서 시간, 분, 초 데이터만 뽑아 구분기호를 colon(:)으로 하여 나타냅니다

t1은 t0처럼 시간, 분, 초 데이터만을 뽑으며 구분기호는 hypen(-)으로 합니다.

t2는 now에 입력된 2020-03-10 01:13:28.843620라는 시간 중 월, 일, 년, 시, 분, 초 데이터만 주어진대로 formatting 해줍니다.

t3, t4도 t2와 동일하나 년, 월, 일의 순서 그리고 년, 월, 일의 구분기호가 달라졌습니다.

시간 formatting에서 중요한 것은 %H, %S, %m, %Y 등 format을 지시하는 문자들의 대소문자 구분을 한다는 것입니다.
t5는 %Y가 아닌 %y로 formatting 했으므로 2020년이 아니라 20년으로 표시됩니다.

 

 

 

 

대표적으로 쓰이는 formatting 기호는 다음과 같습니다.

%Y : 년도(year)를 네 자리수로 나타냅니다.(e.g. 0001, 0002, ..., 2019, 2020, ..., 9999)
%y : 년도(year)를 두 자리수로 나타냅니다.(e.g. 01, 19, 20, ..., 99)
%m : 월(month)을 두 자리수로 나타냅니다.(e.g. 01, 02, ..., 11, 12)
%d : 일(day)을 두 자리수로 나타냅니다.(e.g. 01, 02, ..., 30, 31)
%H : 시간(hour)을 두 자리수로 나타냅니다.(e.g. 00, 01, ..., 22, 23)
%M : 분(minute)을 두 자리수로 나타냅니다.(e.g. 00, 01, ..., 58, 59)
%S : 초(second)를 두 자리수로 나타냅니다.(e.g. 00, 01, ..., 58, 59)
%B : 월(month)을 해당 월의 Full Name으로 나타냅니다.(e.g. January, February, March, ..., November, December)
좀 더 많은 datetime format을 알고 싶다면 아래 링크에서 알아볼 수 있습니다.
Python strftime()

 

 

 

 

아래 table은 format의 종류를 나타냅니다.

Format Description e.g.
%Y 네 자리 수 년도 2020
%y 세기 부분을 제외한 년도 출력 01
%m 두 자리 수 월 [01, 02, ..., 12]
%d 두 자리 수 일 [01, 02, ..., 31]
%H 두 자리 수 시간(24시 기준) [01, 02, ..., 23]
%M 두 자리 수 분 [01, 02, ..., 59]
%S 두 자리 수 초 [01, 02, ..., 59]
%a 요일 줄임말 Mon
%A 요일 풀네임 Monday
%b 달 줄임말 Jan
%B 달 풀네임 January
%I 두 자리 수 시간(12시 기준) [01, 02, ..., 12]
%p AM or PM AM
%j 1년중 누적 날짜 [1, ..., 366]
%U 누적 주차(일요일이 시작, 토요일이 끝) [00, ..., 53]
%W 누적 주차(월요일이 시작, 일요일이 끝 [00, ..., 53]
%c 날짜와 시간을 출력 20/03/13 00:15:35
%w 숫자로 된 요일 [0(일요일), ..., 6]
%x 현재 설정된 로케일에 기반한 날짜 출력 20/03/13
%X 현재 설정된 로케일에 기반한 시간 출력 00:15:35
%Z 시간대 출력 대한민국 표준시
%% 문자 %

 

 

 

 

 

 

 

 

 

datetime module에 속한 datetime class에 있는 strptime method는 날짜와 시간을 명시하는 특정 문자로부터 날짜, 시간 정보를 추출하여 datetime object를 생성합니다.

 

import datetime

date_sample = 20211025
print(date_sample)

date_object = datetime.datetime.strptime(str(date_sample), '%Y%m%d')
print(date_object)


-- Result
20211025
2021-10-25 00:00:00

위 예시는 20211025라는 단순한 숫자를 날짜로 바꾸는 예시입니다.

 

먼저 strptime을 적용하려면 20211025라는 숫자가 아닌 이걸 문자로 바꿔줘야합니다.

그래서 str(date_sample)로 적어준것이죠.

 

strptime(str(date_sample), "%Y%m%d")

위 부분을 보면 20211025라는 문자를 봅시다.

이 문자는 YYYYMMDD의 형식입니다.

따라서 네자리수 년도를 나타내는 %Y, 두자리수 월을 나타내는 %m, 두자리수 일을 나타내는 %d를 합해 "%Y%m%d"라는 패턴으로 적어준 것입니다.

즉, 날짜로 바꿀 원본 데이터(여기서는 20211125)에서 어떤 부분이 각각 년/월/일에 해당하는지를 나타내는 패턴을 적어주는것이죠.

 

그래서 output 결과를 보면 20211025라는 문자가 날짜형식으로 바뀌었음을 볼 수 있습니다.

 

 

 

 

import datetime

date_sample = '2021 10 25'
print(date_sample)

date_object = datetime.datetime.strptime(date_sample, '%Y %m %d')
print(date_object)


-- Result
2021 10 25
2021-10-25 00:00:00

위 예시는 date_sample의 형태가 좀 다릅니다.

YYYY MM DD로서 년/월/일 사이에 공백이 있는 패턴이죠.

 

그래서 strptime의 인자 중 하나인 패턴인자로서 이 공백을 반영하여 '%Y %m %d'로 공백까지 포함하여 적어준 것입니다.

 

 

 

 

 

 

 

 

 

 

 

 

import datetime

date_sample = '9 March, 2020'
print(date_sample)

date_object = datetime.datetime.strptime(date_sample, '%d %B, %Y')
print(date_object)

- Result
9 March, 2020
2020-03-09 00:00:00

위 예시에서 date_object를 보면 strptime method는 두 가지 인자를 받습니다.
첫 번째로 date_sample에 주어진 9 March, 2020라는 글자를 받고,
이 글자의 format이 '일(%d) 월의 영어 full name(%B), 네 글자 년도(%Y)'의 format이라는 format 정보를 받습니다.

그러면 strptime method는 이를 인식하여 2020-03-09 00:00:00라는 일반적인 datetime 형태로 값을 전환해줍니다.

 

 

 

 

strptime에 해대 좀 더 많은 내용 알고 싶다면 아래 링크에서 알아볼 수 있습니다.
Python strptime()

 

 

 

 

 

 

728x90
반응형
Comments