본문 바로가기
Software/Python

파이썬에서 날짜 관련 요긴한 정보 - datetime

by lovey25 2021. 6. 12.
반응형

날짜 정보를 처리해야 할 때 제가 주로 사용하는 "datetime" 라이브러리의 아~주 기본 사용법들입니다. 이번 포스팅에 사용된 모든 코드는 datetime 라이브러리를 import 해야 정상적으로 사용할 수 있습니다.

import datetime

오늘 날짜, 현재 시간

컴퓨터 시계를 통해서 오늘의 날짜 및 시간 정보를 가져오는 함수입니다.

import datetime

ToDay = datetime.datetime.now()

datetime라이브러리 내에 now()라는 함수를 이용하면 지금 함수가 호출된 순간의 날짜와 시간을 반환하며 반환하는 형식은 파이썬에서 날짜/시간을 다루는 데 사용하는 구조체의 형태입니다. 

요일 구하기

위에서 "ToDay"라는 변수에는 오늘의 그리고 현재의 날짜와 시간 정보가 들어있습니다. 이 정보에서 먼저 오늘에 해당하는 요일을 구해보겠습니다. (여기서는 시간은 다루지 않고 날짜만 다룹니다.)

import datetime

ToDay = datetime.datetime.now()
ToDay.weekday()

weekday()라는 함수는 날짜 정보에서 요일을 나타내는 0 ~ 6 사이의 숫자를 반환합니다. 숫자 "0"은 월요일이고 "1"은 화요일입니다. 그리고 마지막으로 숫자 "6"은 일요일을 의미합니다.

날짜 계산

며칠 전 혹은 며칠 뒤의 날짜를 계산할 때는 timedelta() 함수를 사용합니다. 예를 들어 오늘로부터 100일 뒤의 날짜를 계산하고 싶다면 다음과 같이 합니다.

import datetime

ToDay = datetime.datetime.now()
Day100 = ToDay + datetime.timedelta(days=100)

"Day100" 변수는 100일 뒤의 날짜 정보가 담겨있는 구조체가 되겠습니다.

 

날짜에서 "년, 월, 일" 추출

날짜/시간의 구조체에서 연도, 월, 일에 해당하는 숫자를 추출하는 방법입니다.

먼저 구조체에서 연도만 추출하고 싶다고 하면 "year"라는 키워드를 사용합니다. 날짜 정보에서 연도에 해당하는 숫자를 정수 형태로 반환합니다. 마찬가지로 "month"와 "day"는 각각 월과 일에 해당하는 숫자를 반환합니다.

import datetime

ToDay = datetime.datetime.now()

YYYYMMDD = str(ToDay.year)+str(ToDay.month).zfill(2)+str(ToDay.day).zfill(2)
YYYYMMDD = Today.strftime('%Y%m%d')

5행의 코드는 연도와, 월 그리고 날짜를 각각 구하고 문자열 형태로 변환을 한 다음 모두 합치는 코드입니다. 그리고 월과 일에는 zfill()이라는 문자열 처리 함수가 사용되었는데 반환되는 숫자가 만약 1자리라면 앞에 0을 붙여서 2자리로 표시하게 해 줍니다. 따라서 만약 오늘 날짜가 2021년 6월 12일이라면 "20210612"라는 6자리 숫자가 반환되는 거죠.

그리고 6행에서 사용한 "strftime()" 함수는 이런 일련의 과정들을 정해진 포맷에 따라 알아서 문자열로 출력해주는 일을 하는데요. '%y%m%d"라는 지시자는 5행의 코드와 동일한 형태로 날짜를 6자리 숫자의 포맷을 의미합니다.

아래 표는 지시자의 종류와 의미를 설명한 것입니다.

지시자 의미 예시
%a 요일을 로케일의 축약 이름으로. Sun, Mon, …, Sat (en_US);
So, Mo, …, Sa (de_DE)
%A 요일을 로케일의 전체 이름으로. Sunday, Monday, …, Saturday (en_US);
Sonntag, Montag, …, Samstag (de_DE)
%w 요일을 10진수로
(0:
일요일, 6: 토요일)
0, 1, …, 6
%d 0으로 채워진 10진수로. 01, 02, …, 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으로 채워진 10진수로. 01, 02, …, 12
%y 년도를 0으로 채워진 10진수 2자리로 00, 01, …, 99
%Y 년도를 10진수 4자리로 0001, 0002, …, 2013, 2014, …, 9998, 9999
%H 시간을 2자리 숫자로(24시간제) 00, 01, …, 23
%I 시간을 2자리 숫자료(12시간제) 01, 02, …, 12
%p 로케일의 오전 / 오후 AM, PM (en_US); am, pm (de_DE)
%M 분을 2자리 숫자로 00, 01, …, 59
%S 초를 2자리 숫자로 00, 01, …, 59
%f Ms6자리 숫자로 000000, 000001, …, 999999
%z ±HHMM[SS[.ffffff]] 형태의 UTC 오프셋 (비어 있음), +0000, -0400, +1030, +063415, -030712.345216
%Z 시간대 이름 (비어 있음), UTC, GMT
%j 연중 일을 3자리 숫자로 001, 002, …, 366
%U 주 번호(일요일이 주의 시작)2자리 숫자로 00, 01, …, 53
%W 주 번호(월요일이 주의 시작)2주리 숫자로 00, 01, …, 53
%c 로케일의 날짜와 시간 표현. Tue Aug 16 21:30:00 1988 (en_US);
Di 16 Aug 21:30:00 1988 (de_DE)
%x 로케일의 날짜 표현. 08/16/88 (None); 08/16/1988 (en_US); 16.08.1988 (de_DE)
%X 로케일의 시간 표현. 21:30:00 (en_US); 21:30:00 (de_DE)
%% 리터럴 '%' 문자. %

년도, 월, 일의 숫자로 날짜 구조체 만들기

앞에서는 날짜 정보에서 연월일의 숫자를 추출하는 방법을 알아봤는데 이번에는 반대로 연월일 숫자를 가지고 날짜/시간의 구조체를 만드는 방법입니다.

import datetime

theDay = datetime.datetime(2021, 06, 07)
theDay = datetime.strptime('20210607', '%Y%m%d')

3행의 datetime()이라는 함수는 연도, 월, 일의 구분된 인수를 받아서 날짜를 나타내는 구조체를 반환해주는 함수입니다. 물론 연월일뿐만 아니라 시간, 분, 초의 시간 정보도 입력할 수 있고 만약 위 코드처럼 입력하지 않으면 "0"이 입력됩니다.

strftime() 함수와 마찬가지로 4행의 "strptime()"함수는 3행의 코드와 동일한 역할을 합니다. 입력하는 날짜 정보의 포맷을 지시자를 통해서 지정해 줄 수 있으며 지시자는 위에서 설명한 것과 동일합니다.

 

끝!

반응형

댓글