[python 기초] strptime, strftime

EMMA·2022년 7월 10일
0

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개의 댓글