django로 작업하보니,datetimefield()
를 종종 다루게 되었다.
datetimefield()
데이터를 처리하는 방법이 크게 2가지가 있는데, strptime()
과 strftime()
이다.
그래서 이번 글에서 datetime 모듈과 처리방법까지 정리해봤다.
파이썬 datetime 모듈은 날짜/시간 관련 데이터 처리를 지원한다.
datetime.date.today()
>>>datetime.date(2022,7,10)
datetime.datetime.now()
>>> datetime.datetime(2022,7,10,11,21,15,635132)
각 객체의 타입은 datetime.date
과 datetime.datetime
이며, 이 외에도 datetime 모듈에는 몇 가지 주요 type이 다수 존재한다.
datetime.date
datetime.time
datetime.datetime
datetime.timedelta
date
, time
, or datetime
datetime.tzinfo
datetime.timezone
timedelta
를 인자로 받아 객체 생성 timezone(timedelta(0))
의 결과값은 datetime.timzezone.utc
django의 주요 field 중에는 datetime을 다루는 datefield()
와datetimefield()
가 있다.
2개 field는 auto_now
와 auto_now_add
옵션을 지정할 수 있는데, 각각의 의미는 아래와 같다.
auto_now
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()
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