초보 개발자

datetime 파이썬에서 날짜와 시간 다루기 본문

Python/이것 저것

datetime 파이썬에서 날짜와 시간 다루기

taehyeki 2021. 12. 25. 14:12

datetime 패키지

datetime 패키지에서는 날짜와 시간을 함께 저장하는 datetime 클래스,

날짜만 저장하는 date 클래스, 시간만 저장하는 time 클래스,

시간 구간 정보를 저장하는 timedelta 클래스 등을 제공한다.

 

import datetime

먼저 datetime을 import한다!

 

날짜와 시간을 모두 알려주는 datetime 클래스부터 알아보자.

패키지 이름과 클래스 이름이 datetime으로 같기 때문에 사용할 때 헷갈린다.

time = datetime.datetime #이렇게 사용해야하니
import datetime as dt # 이런식으로 이름을 바꿔주자!!

또한 신기한 점은 다른 클래스와 달리 클래스 이름이 대문자로 시작하지 않는다. datetime 클래스에는 객체를 생성하지 않고도 바로 클래스에서 사용할 수 있는 클래스 메서드라는 것을 제공한다. 가장 대표적인 것이 현재 시각을 출력하는 now() 메서드이다.

import datetime as dt
now = dt.datetime.now()
print(now)

2021-12-25 13:51:56.989402 # 크리스마스 🎄🎄🎄

now 클래스 메서드는 컴퓨터의 현재 시각을 datetime 클래스 객체로 만들어 반환한다. 

print(type(now))
<class 'datetime.datetime'>

따라서 now에 다음과 같은 속성이 들어 있다.

  1. year: 연도
  2. month: 월
  3. day: 일
  4. hour: 시
  5. minute: 분
  6. second: 초
print(now)
print(now.year)
print(now.month)
print(now.day)
print(now.hour)
print(now.minute)
print(now.second)

2021-12-25 13:58:02.168179
2021
12
25
13
58
2

 

속성만 가지고 있는 것이 아니라 now는 메서드 또한 가지고 있다.

  1. weekday: 요일 반환 (0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일)
  2. strftime: 문자열 반환
  3. date: 날짜 정보만 가지는 date 클래스 객체 반환
  4. time: 시간 정보만 가지는 time 클래스 객체 반환

자주 사용 되는 메서드는 날짜와 시간 정보를 문자열로 바꿔주는 strftime 메서드다. 이 메서드는 어떤 형식으로 문자열을 만들지 결정하는 형식 문자열을 인수로 받는다. 형식 문자열은 날짜 및 시간 지정 문자열을 포함한다. 

날짜 및 시간 지정 문자열 의미
%Y 앞의 빈자리를 0으로 채우는 4자리 연도 숫자
%m 앞의 빈자리를 0으로 채우는 2자리 월 숫자
%d 앞의 빈자리를 0으로 채우는 2자리 일 숫자
%H 앞의 빈자리를 0으로 채우는 24시간 형식 2자리 시간 숫자
%M 앞의 빈자리를 0으로 채우는 2자리 분 숫자
%S 앞의 빈자리를 0으로 채우는 2자리 초 숫자
%A 영어로 된 요일 문자열
%B 영어로 된 월 문자열

2.15 파이썬에서 날짜와 시간 다루기 — 데이터 사이언스 스쿨 (datascienceschool.net)

 

2.15 파이썬에서 날짜와 시간 다루기 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency -->

datascienceschool.net

이 사이트에서 참조하였습니다.

 

 

timedelta

timedelta를 사용해서 특정 시점의 기간을 구할 수 있습니다.  

a = dt.timedelta(days=5)
print(a)
5 days, 0:00:00

a라는 변수가 저 5일을 참조하고 있고 이를 통해서 일정 시점의 날짜를 구할 수 있습니다.

datetime.date.today()를 사용하여 현재 날짜를 기준으로 5일뒤의 날짜를 구해보겠습니다.

today = dt.date.today()
print(today)
a = dt.timedelta(days=5)
print(today + a)

2021-12-25 #today
2021-12-30 #today + a

이를 통해서 날짜를 대소 (>, ==, <) 등을 판별할 수도 있고 지난 시점을 구할 수도 있어서 자주 쓰인다.

자세한 내용은 아래를 참조!

>>> from datetime import date, timedelta
>>> week = timedelta(weeks=1) # 일주일의 기간을 구함
>>> week 
datetime.timedelta(days=7)
>>> next_week = date.today() + week
>>> next_week
datetime.date(2020, 7, 25)
>>> two_weeks = week * 2
>>> two_weeks
datetime.timedelta(days=14)
>>> week < two_weeks
True
>>> two_weeks == timedelta(weeks=2)
True
>>> last_week = next_week - two_weeks
>>> last_week
datetime.date(2020, 7, 11)

 

strptime

dt.datetime.strptime()로 사용 할 수 있으며

strptime(문자열, 형식)의 형태로 사용된다.

 

strftime은 now()에서 받아온 걸 ("형식")으로 적으면 문자열로 출력이 되었는데 

strptime은 반대로 문자열과 형식을 적어주면 datetime으로 변환해준다.

 

a = dt.datetime.strptime("2020-05-04", "%Y-%m-%d")
print(a)

2020-05-04 00:00:00
날짜 및 시간 지정 문자열 의미
%Y 앞의 빈자리를 0으로 채우는 4자리 연도 숫자
%m 앞의 빈자리를 0으로 채우는 2자리 월 숫자
%d 앞의 빈자리를 0으로 채우는 2자리 일 숫자
%H 앞의 빈자리를 0으로 채우는 24시간 형식 2자리 시간 숫자
%M 앞의 빈자리를 0으로 채우는 2자리 분 숫자
%S 앞의 빈자리를 0으로 채우는 2자리 초 숫자
%A 영어로 된 요일 문자열
%B 영어로 된 월 문자열

%y는 2자리 연도 19,20,21 출력