본문 바로가기
Python

Python datetime 날짜, 시간 출력, 날짜 더하기 feat. strftime, strptime

by 시바도지 2023. 10. 23.
반응형

파이썬에서 날짜와 시간을 다루기 위해서는 datetime 모듈을 사용한다.

 

 

예제)

import datetime

# 현재 시간 가져오기
current =  datetime.datetime.now()
print(current)

# 1시간 후
one_hour_later = current + datetime.timedelta(hours=1)
print(one_hour_later)

# 1시간 전
one_hour_ago = current - datetime.timedelta(hours=1)
print(one_hour_ago)

# 내일 시간
tomorrow = current  + datetime.timedelta(days=1)
print(tomorrow)

# 어제 시간
yesterday = current - datetime.timedelta(days=1)
print(yesterday)

# 10분 후
ten_minutes_later = current + datetime.timedelta(minutes=10)
print(ten_minutes_later)

# 10분 전
ten_minutes_later = current - datetime.timedelta(minutes=10)
print(ten_minutes_later)

 

 

strftime()


위의 날짜 데이터의 타입을 확인해보면 `datetime` 이라고 출력될 것이다.

이것을 문자열(str) 데이터로 사용하기 위해서는 `strftime()` 메소드를 사용하면 된다. 

메소드 내의 인자에는 원하는 포멧을 넣어주면 된다.

 

문자열 형식

  • %Y : 4자리 수 년(year)
  • %y : 2자리 수 년(year)
  • %m : 2자리 수 월(month, 1~9월의 경우, 앞에 0을 채운다)
  • %d : 2자리 수 일(date, 1~9일의 경우, 앞에 0을 채운다)
  • %H : 2자리 수 시간 (24-hour clock, 0~9시의 경우, 앞에 0을 채운다)
  • %M : 2자리 수 분 (0~9분의 경우, 앞에 0을 채운다)
  • %S : 2자리 수 초 (0~9초의 경우, 앞에 0을 채운다)

 

예제)

current.strftime('%Y-%m-%d %H:%M:%S')

# 2023-10-01 00:00:00

 

 

strptime()


그렇다면 문자열의 날짜를 다시 datetime으로 변환하려면 strptime() 메소드를 사용하면된다.

첫번째 인자에는 문자열(str) 타입의 날짜를 넣고, 두번째 인자에는 해당 문자열과 매칭되는 포멧을 넣어준다. 

 

만약 일치하지 않는다면 `ValueError: time data '2023-10-01 00:00:00' does not match format ...` 과 같은 에러가 발생할 것이다.

 

 

예제)

str_time = current.strftime('%Y-%m-%d %H:%M:%S')
print(type(str_time)) # str

date_time = datetime.datetime.strptime(str_time, '%Y-%m-%d %H:%M:%S')
print(type(date_time)) # datetime

 

 

응용 문제(날짜 출력, 더하기, 빼기)


문제: UTC 현재 시간으로 부터 30분 후를 계산하여 포멧에 맞게 출력

포멧 예시: 2023-10-10 00:00:00

 

코드)

import datetime

calc_time = (datetime.datetime.utcnow() + datetime.timedelta(minutes=30)).strftime("%Y-%m-%d %H:%M:%S")
print(calc_time)

 

 

문제: 현재 날짜에서 3일 후를 계산하여 포멧에 맞게 출력

포멧 예시: 2023-10-10 00:00:00

 

코드)

import datetime

now = datetime.datetime.now()
calc_time = (now + datetime.timedelta(days=3)).strftime("%Y-%m-%d %H:%M:%S")

print(calc_time)

 

반응형

댓글