장고를 공부하다보면 datetime 을 사용해서 현재시간을 구해야되기도 하고
포스팅을 했을때 날짜와 현재와의 차이를 구해야할 때가 있죠?
그때마다 너무 해깔리더라고요.
예를들어서 아래 그림에서 3일이라고 표시되죠?
업데이트 한지 3일이 지났다는 의미에요.
이런 시간 계산하는 방법을 한번 알아보겠습니다.
참고로 django의 경우 timezone을 쓰는건 알고 계시죠?
이렇게 settings.py에서 timzezone을 Asia/Seoul 로 설정한거 기본 django에서 수없이 많이 들으셨을꺼에요.
이를 통해 models.py에서 예를들어 포스트나 피드라는 모델을 만들거나 업데이트를 했을때 자동으로 시간을 기록하곤 합니다.
update_time과 create_time 에서 DateTimeField를 통해 auto_now, auto_now_add파라미터를 이용해 자동 기록하게됩니다.
이걸 그냥 사용하면 어떻게 표기될까요?
네 이렇게 표기되네요
우리가 원하는 데이터일수도 있지만 보통은 정제되지 않은 데이터를 사용하진 않죠?
우리는 원하는 데이터만 사용하고 싶은거잖아요.
일단 지금 현재 데이터 포맷은 timezone이에요.
목표는 현재시간과 업데이트 시간과의 시간차이를 구하는거에요.
그러면 같은 타입의 변수를 써야겠죠?
자 현재 시간을 불러오는 함수에요.
django utils에서 지원해줍니다.
그리고 나서 models.py에서 시간 계산하는 메소드를 빼줍시다.
자, time_update라는 메소드를 만들었습니다.
time_difference를 통해 값을 구했습니다.
이 값은 timedelta 타입입니다.
자 timedelta(현재 시간 - 업데이트 시간)을 했을때 결과 입니다.
(뒤에 일은 신경 안쓰셔도 됩니다...)
알아볼수 없는 값이죠?
이 값에서 우리는 원하는 값을 뽑아낼꺼에요
참고로 timedelta는 아래와 같이 데이터를 뽑아낼 수 있습니다.
위는 사용법 예시였구요. 우리가 알고싶은건
날짜, 시간, 분 , 초를 어떻게 뽑아내는데? 이거죠?
자 여기서 보면 제가 구하고 싶은 'hour'의 경우 3600초로 나누면 된다고 써져있죠?
그럼 이렇게 쓰면 되겠네요
자 드디어 원하는 시간이 나왔습니다.
정리하자면
우리는 timezone을 사용하기 때문에 timezone을 이용해서 시간 차이를 계산했습니다.
그리고 나서 차이를 구하고 나니 timedelta에 값이 담겼어요.
이것을 시간변환해서 구하게되었습니다.
지금까지 긴 글 봐주셔서 감사합니다.
다음번에도 좋은 정보로 찾아뵙겠습니다.
감사합니다.
'컴퓨터 프로그래밍 > Django' 카테고리의 다른 글
[Django] image 업로드 시 실수 하는 부분 체크! django 에서 사진이 안불러져요. (0) | 2023.11.07 |
---|---|
[Django] media root에 이은 static root 설정과 css분리 방법 정리! (0) | 2023.10.23 |
[Django] settings.py에서 media_url과 media_root 설정 및 ruls.py에서 import 구분하기 (1) | 2023.09.25 |
[Django] 기본중의 기본 python, Django를 들어가기 전에 알아야 될 것들 (0) | 2023.09.05 |
[Django] VSCode 에서 django 자동완성이 안될 경우 (0) | 2023.09.01 |