[python 기초] strptime, strftime

EMMA·2022년 7월 10일

django로 작업하보니,datetimefield()를 종종 다루게 되었다.
datetimefield() 데이터를 처리하는 방법이 크게 2가지가 있는데, strptime()strftime() 이다.

그래서 이번 글에서 datetime 모듈과 처리방법까지 정리해봤다.


datetime in python

파이썬 datetime 모듈은 날짜/시간 관련 데이터 처리를 지원한다.

datetime.date.today()
>>>datetime.date(2022,7,10) 

datetime.datetime.now()
>>> datetime.datetime(2022,7,10,11,21,15,635132)

각 객체의 타입은 datetime.datedatetime.datetime 이며, 이 외에도 datetime 모듈에는 몇 가지 주요 type이 다수 존재한다.

  • class datetime.date
  • class datetime.time
  • class datetime.datetime
  • class datetime.timedelta
    • the difference between 2 date, time, or datetime
  • class datetime.tzinfo
  • class datetime.timezone
    • UTC 기준으로, timedelta를 인자로 받아 객체 생성
    • timezone(timedelta(0)) 의 결과값은 datetime.timzezone.utc

datetime in django

django의 주요 field 중에는 datetime을 다루는 datefield()datetimefield()가 있다.
2개 field는 auto_nowauto_now_add 옵션을 지정할 수 있는데, 각각의 의미는 아래와 같다.

  • auto_now
    • create 'last_modified' timestamps (save될 때마다 날짜 저장)
  • auto_now_add

위의 내용에 따라, 데이터 저장 시간을 계속 업데이트해야 하는 경우는 auto_now 설정을 해준다.
만약 데이터 저장 시간을 계속 바꿔야 하는 경우, auto_now를 사용하거나 auto_now_add=True 대신 아래와 같이 설정하라고 권장되어 있다.

For DateField: default=date.today - from datetime.date.today()
For DateTimeField: default=timezone.now - from django.utils.timezone.now()


strftime, strptime

datetime(날짜,시간)을 str로 출력할 때는 strftime(),
문자열에서 다시 datetime으로 변환하려면 strptime() 을 사용한다.


current_time = datetime.datetime.now()
>>> datetime.datetime(2022, 7, 8, 14, 6, 20, 58637)

#str으로 변환 
current_time.strftime("%Y%m%d%H%M")
>>> '202207081406'

#다시 datetime 객체로 변환 
datetime.datetime.strptime('202207081406', "%Y%m%d%H%M")
>>> datetime.datetime(2022, 7, 8, 14, 6)

strptime 을 사용할 때 반드시 날짜 데이터는 str 형태여야 한다.
(220711 update)strptime은 2번째 인자로 format code를 받는다. 그래야 format code와 매칭하여 주어진 str를 알맞은 datetime 데이터로 저장할 수 있다.

a.time 
>>> datetime.datetime(2022,7,8,16,0)

x = datetime.datetime.strptime(a.time, "%Y%m%d%H%M")
>>> TypeError: strptime() argument 1 must be str, not datetime.datetime

(update 220721) 만약 sql에서 insert into ~ values문으로 데이터를 삽입한다면, 아래 형식으로 넣어야 한다.

#date = datetimefield()
insert into [table name](date) values('yyyy-MM-dd hh:mm:ss')

그렇지 않으면 Incorrect datetime value를 뱉는다.


문자열 형식

주요 문자열 형식은 아래와 같이 정의한다.

  • %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을 채운다)

참고 자료
https://docs.python.org/3/library/datetime.html#available-types
https://dev-jy.tistory.com/5

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글