Python datetime

LshDevLog·2026년 4월 4일

python

목록 보기
7/16
post-thumbnail

datetime은 시간/날짜 처리 표준 라이브러리

  • datetime 주요 클래스
    • datetime: 날짜 + 시간
    • date: 날짜만(년,월,일)
    • time: 시간만(시,분,초)
    • timedelta: 시간 차이
    • timezone: 타임존
    • tzinfo: 타임존정보

datetime

from datetime import datetime

now = datetime.now()
print(now)
  • now: 컴퓨터에 설정된 현재 로컬 시간 출력

from datetime import datetime

now = datetime.now()

print(now.year)
print(now.month)
print(now.day)
print(now.hour)
print(now.minute)
print(now.second)
2026
4
3
6
16
1
  • 특정 값 추출 가능

from datetime import datetime

dt = datetime(2026, 4, 3, 5, 0, 0)
print(dt)
  • datetime(날짜): 날짜 생성

from datetime import datetime

now = datetime.now()
new_time = now.replace(day=30)
print(new_time)
2026-04-30 06:24:23.205191
  • replace: 특정 값만 변경

from datetime import datetime

dt = datetime(2026, 2, 28)

new_dt = dt.replace(day=30)

print(new_dt)
ValueError: day is out of range for month
  • 존재하지 않는 날짜로 변경하면 ValueError 발생

from datetime import datetime

dt = datetime.strptime("2026-04-03 05:00:00", "%Y-%m-%d %H:%M:%S")
print(dt)
print(type(dt))

dt = dt.strftime("%Y-%m-%d %H:%M:%S")
print(type(dt))
2026-04-03 05:00:00
<class 'datetime.datetime'>
<class 'str'>
  • strptime: 문자열 -> datetime 변환
  • strftime: datetime -> 문자열 변환

from datetime import datetime, timezone

now = datetime.now(timezone.utc)
ts = now.timestamp()

print(ts)
1775317695.429223
  • timestamp
    • 시간을 숫자(초)로 표현한 값(float)
    • timezone 영향 없음 (절대 시간)
    • 비교/정렬 매우 빠름

from datetime import datetime, timezone

now = datetime.now(timezone.utc)
expire_ts = now.timestamp() + 1800 # 30분 후
  • 만료 시간(토큰, 세션)으로 사용

if current_ts > expire_ts:
    print("만료")
  • 시간 비교(빠름)

from datetime import datetime, timezone

now = datetime.now(timezone.utc)
ts = now.timestamp()

dt = datetime.fromtimestamp(ts, timezone.utc)
print(dt)
  • fromtimestamp: timestamp를 다시 datetime으로

from datetime import datetime, timezone

now = datetime.now(timezone.utc)

print(now.isoformat())
2026-04-04T15:59:48.593116+00:00
  • isoformat
    • datetime을 표준 문자열(ISO 8601)로 변환
      • 표준문자열: 서로 다른 시스템이 약속된 형식으로 데이터를 표현한 문자열
        • 프론트엔드/백엔드/모바일 전부 동일하게 해석
        • 언어독립적: Python, JavaScript, Java, Go 다 동일하게 사용
        • ISO 8601형식: YYYY-MM-DDTHH:MM:SS+TZ
          • 날짜 + T(날짜/시간 구분) + 시간 + 타임존
    • 사람이 읽기 쉬움(로그)
    • API/JSON에 최적

timezone

from datetime import datetime, timezone

now = datetime.now(timezone.utc)
print(now)
  • now(timezone.utc): 서버에서는 UTC(협정세계시) 기준 사용이 기본
    • UTC는 타임존 영향을 받지 않는 기준 시간(절대 시간)
  • UTC 시간에서 +9시간이 한국 시간(KST)

from datetime import datetime, timezone, timedelta

naive = datetime.now()
aware = datetime.now(timezone.utc)
print(naive)
print(aware)
2026-04-04 04:58:26.599244
2026-04-03 19:58:26.599277+00:00
  • naive
    • 시간만 나오고 타임존 정보가 없음
    • 같은 코드인데 환경에 따라 결과가 달라짐
  • aware
    • utc(절대 시간)로 어디서 실행하던 같은 결과가 나옴
    • 서버에서는 무조건 utc 사용

from datetime import datetime, timezone, timedelta

naive = datetime.now()
aware = datetime.now(timezone.utc)
print(type(naive))
print(type(aware))
print(naive > aware)
<class 'datetime.datetime'>
<class 'datetime.datetime'>
TypeError: can't compare offset-naive and offset-aware datetimes
  • naive와 aware의 type은 똑같이 datetime.datetime으로 나오지만 비교시 TypeError뜸

from datetime import datetime, timezone
from zoneinfo import ZoneInfo

utc = datetime.now(timezone.utc)
print(utc)
kst = utc.astimezone(ZoneInfo("Asia/Seoul"))
print(kst)
2026-04-04 14:29:02.088871+00:00
2026-04-04 23:29:02.088871+09:00
  • 서버에 저장할 때는 utc로 저장
  • astimezone
    • 사용자에게 보여야할때 사용
    • 절대 시간 유지하면서 표현되는 시간만 바뀜

timedelta

from datetime import datetime, timezone, timedelta

now = datetime.now(timezone.utc)
tomorrow = now + timedelta(days=1)
print(now)
print(tomorrow)
2026-04-04 14:35:38.076498+00:00
2026-04-05 14:35:38.076498+00:00
  • timedelta: 시간 차이/시간 연산 객체

from datetime import datetime

dt1 = datetime.now()
dt2 = datetime(2026, 4, 2, 11, 22, 33)

diff = dt1 - dt2

print(type(diff))
<class 'datetime.timedelta'>
  • datetime끼리 뺀 후 결과값의 타입은 timedelta

from datetime import timedelta

a = timedelta(days=1)
b = timedelta(hours=12)

diff = a - b
print(diff)
  • timedelta끼리도 연산 가능

from datetime import timedelta

a = timedelta(days=1)
b = timedelta(hours=12)
diff = a - b

print(diff.total_seconds())
43200.0
  • total_seconds: 전체 시간을 초로 바꿈

0개의 댓글