Python datetime 라이브러리 사용법 - 오름캠프

프로필 사진mingke

Python datetime

목차

datetime 이란

오름캠프에서 수업 종료 후 밤 시간에도 모여서 공부하시는 분들이 있습니다. 어제 공부 중에 파이썬에서 날짜와 시간을 다루는 것이 있었고 datetime 라이브러리를 사용하고 있었습니다. 좀 더 자세한 설명으로 알려드리기 위해 이 글을 작성합니다.

datetime은 파이썬의 기본 내장 라이브러리로 날짜와 시간을 다룹니다. 실무에서도 많이 사용하게 될 라이브러리라서 반드시 잘 알아두는 것이 좋습니다.

datetime 사용법

datetime 은 다음과 같이 사용할 수 있습니다.

datetime 객체 생성

보통 datetime객체는 년-월-일 시:분:초 를 가집니다.

from datetime import datetime
 
# 특정 기준 시간을 만들거나 할 때 이렇게 사용할 수 있습니다.
# 2024년 7월 10일 10시 10분 10초
start_datetime = datetime(2024, 7, 10, 10, 10, 10)

date 객체 생성

날짜만 필요한 경우 date객체를 생성할 수 있습니다.

from datetime import date
 
# 2024년 7월 10일
start_date = date(2024, 7, 10)

지금, 오늘을 쉽게 만드는 법

from datetime import date, datetime, UTC
 
# 오늘 날짜
today = date.today()
# 지금 시점의 년-월-일 시:분:초
now = datetime.now()
 
# UTC Timezone
utc_now = datetime.now(UTC)
utc_now

다만 Timezone이라는 것이 있는데 사용하는 서버환경에 따라 UTC로 되어있는 경우가 존재합니다. 다음은 Timezone을 Seoul로 설정하는 방법입니다.

from datetime import datetime
from zoneinfo import ZoneInfo
 
korea_tz = ZoneInfo("Asia/Seoul")
now_korea = datetime.now(korea_tz)

Formatting 및 형 변환

datetime 에서 str 으로 str 에서 datetime 으로 형 변환을 할 수 있고 변환할 때 formatting도 할 수 있습니다.

# 날짜와 시간을 문자열로 포맷팅
now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("포맷팅된 날짜와 시간:", formatted_date)
print(type(formatted_date)) # <class 'str'>
 
# 문자열을 날짜와 시간 객체로 변환
date_string = "2024-07-10 20:00:45"
parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print("파싱된 날짜와 시간:", parsed_date)
print(type(parsed_date)) # <class 'datetime.datetime'>
  • strftime - datetime을 입력한 포맷의 형태의 문자열로 변환
  • strptime - 문자열과 포맷을 입력받고 datetime객체로 변환

포맷팅이 여러가지가 지원되는데 나열할테니 참고해보세요. 위에 예시에 사용된 포맷팅이 일반적으로 많이 사용되는 방법입니다.

from datetime import datetime
 
now = datetime.now()
 
# 포맷팅 열거입니다.
print("4자리 연도:", now.strftime("%Y")) # 4자리 연도: 2024
print("2자리 연도:", now.strftime("%y")) # 2자리 연도: 24
print("2자리 월:", now.strftime("%m")) # 2자리 월: 07
print("월의 전체 이름:", now.strftime("%B")) # 월의 전체 이름: July
print("월의 축약 이름:", now.strftime("%b")) # 월의 축약 이름: Jul
print("2자리 일:", now.strftime("%d")) # 2자리 일: 10
print("요일의 전체 이름:", now.strftime("%A")) # 요일의 전체 이름: Wednesday
print("요일의 축약 이름:", now.strftime("%a")) # 요일의 축약 이름: Wed
print("24시간 형식의 시간:", now.strftime("%H")) # 24시간 형식의 시간: 21
print("12시간 형식의 시간:", now.strftime("%I")) # 12시간 형식의 시간: 09
print("AM/PM:", now.strftime("%p")) # AM/PM: PM
print("분:", now.strftime("%M")) # 분: 56
print("초:", now.strftime("%S")) # 초: 10
print("밀리초:", now.strftime("%f")) # 밀리초: 648686
print("UTC 오프셋:", now.strftime("%z")) # UTC 오프셋:
print("시간대 이름:", now.strftime("%Z")) # 시간대 이름:
print("년의 일 수:", now.strftime("%j")) # 년의 일 수: 192
print("년의 주 번호 (일요일 시작):", now.strftime("%U")) # 년의 주 번호 (일요일 시작): 27
print("년의 주 번호 (월요일 시작):", now.strftime("%W")) # 년의 주 번호 (월요일 시작): 28
print("날짜와 시간을 표현하는 문자열:", now.strftime("%c")) # 날짜와 시간을 표현하는 문자열: Wed Jul 10 21:56:10 2024
print("날짜를 표현하는 문자열:", now.strftime("%x")) # 날짜를 표현하는 문자열: 07/10/24
print("시간을 표현하는 문자열:", now.strftime("%X")) # 시간을 표현하는 문자열: 21:56:10

날짜 계산

‘2024-07-10’ 문자열로는 이 날로부터 10일 전, 10일 후 이런걸 구할 수 없습니다. datetime은 이게 가능합니다.

now = datetime.now()
 
datetime_before_10_days = now - timedelta(days=10)
datetime_after_10_days = now + timedelta(days=10)
datetime_before_10_weeks = now - timedelta(weeks=10)
datetime_after_10_seconds = now + timedelta(seconds=10)
 
print(datetime_before_10_days)
print(datetime_after_10_days)
print(datetime_before_10_weeks)
print(datetime_after_10_seconds)

추가

다음은 추가로 알아두면 좋은 방법입니다.

# datetime -> timestamp
# timestamp를 모르신다면 UNIX timestamp에 대해서 알아보세요
now = datetime.now()
now.timestamp()
 
# timestamp -> datetime
import time
 
# 현재 시간의 타임스탬프
timestamp = time.time()
dt_from_timestamp = datetime.fromtimestamp(timestamp)
 
# ISO 8601 형식의 문자열
# ISO 8601 형태의 시간도 볼 일이 있습니다
iso_string = "2024-07-10T15:30:45+09:00"
 
# iso -> datetime
dt_from_iso = datetime.fromisoformat(iso_string)
 
# datetime -> iso
iso_from_dt = dt_from_iso.isoformat()

마무리

datetime 라이브러리에 대해서 간단하게 알아봤는데요. 이 글에서 언급한 것보다 더 많은 처리를 할 수 있지만 많이 쓰는 것들만 우선적으로 다뤄봤습니다. datetime은 반드시 알아야 하는 것이니 꼭 숙달되도록 잘 연습해보시기 바랍니다.

Loading...
Loading...