안녕하세요 시란입니다.
이번시간에는 시간을 다루는 방법에 대해서 알아보겠습니다.
한번 우리 다같이 시간의 마술사과 되어볼까요?
그 전에 간단하게 사칙연산 중 나눗셈을 하는 여러가지 방법에 대해서 간략히 알아볼께요
먼저 실수나누기 ! 3/2 를 하게 되면 1.5가 나오죠?
'/' 기호를 쓰면 됩니다. 익히 알고 있는 내용이죠?
그다음은 정수나누기 방법입니다.
우리가 나눗셈을 할때 소숫점을 없애고 싶을때 물론 int( 3/2 ) 를 쓰게 되면 1 이라는 결과가 나오게 됩니다.
하지만 이런 int()를 쓰지 않고 '//'기호를 쓰게 되면 편하게 정수값만 얻을 수 있게 됩니다.
그리고 우리는 나눗셈을 하다보면 몫이 아닌 나머지 값을 얻고 싶을때가 있을꺼에요
예를 들어 변수 x 값의 변화에 따라서 결과값이 달라지게 코딩을 하고 싶을때
for문을 통해 조건문에 5 % x 를 한 나머지 값을 얻어, 나머지 값에 따라서 a 조건, b조건 등등을 실행하도록 코딩할 때가 있죠?
이때 쓰는게 '%' 값입니다.
그리고 몫과 나머지를 둘다 사용하고 싶다? 라고 할때는 파이썬 기본내장함수인 divmod() 를 사용하면 됩니다.
예시로, divmod(5,2)를 하게 되면 결과값으로 몫과 나머지인 (2, 1)를 얻게 된답니다.
여기까지 간략하게 나눗셈을 알아보았구요.
본격적으로 시간을 다루어봅시다.
django 에서 settings.py에 들어가게 되면 우리는 먼저 timezone을 설정하게 되어있어요.
아래 이부분이죠? TIME_ZONE = "Asia/Seoul"로 되어있죠?
우리는 시간대를 아시아 국가인 서울의 시간대로 사용하겠다는 의미에요.
이제 우리는 이 timezone이라는 값을 쓸수 있게 됩니다. ㅎㅎ
그러면 한번 현재 시간을 간단하게 구해볼까요?
현재시간 구하기 방법은 간단해요 timezone.now() 를 써보면 됩니다.
timezone.now()
자 이걸 쓰게 되면 나오는 결과는 이렇게 나옵니다.
2023-11-15 12:58:07.374976+00:00
연 월 일 시간 분 초 가 다 나오게 됩니다.
물론 파이썬에서 datetime을 import 해서 쓸수 있어요.
import datetime
now = datetime.datetime.now()
이런식으로 말이죠?
하지만 우리는 django를 사용하기도 하고, settings.py에 TIMEZONE을 사용하고 있는데 굳이 datetime을 쓸 필요는 없겠죠?
그러면 이제 timezone을 통해 얻은 시간에서 각각의 요소들을 뽑아봅시다.
이건 간단한 영어단어만 알면 쉽게 얻을수 있어요.
예를들어 나는 얻어낸 현재시간에서 무슨 날인지 얻고 싶을땐? 날은 영어로 day였죠?
이렇게 하면 15라는 값을 얻을 수 있답니다.
마찬가지로 시간, 분, 초를 얻고 싶을땐 각각 hour, minute, second를 사용하면 되겠죠?
이렇게 현재 시간에서 각각 필요한 요소들을 뽑을수 있답니다.
그러면 이제 두번째 문제로 예를 들어 현재시간이 아니라 내가 어떤 포스팅을 오늘로부터 얼마나 지났는지 알고 싶을때가 있죠?
그럴땐 포스팅을 올린 날짜와 현재 날짜의 차이값을 계산하면 되겠죠?
이때 사용하는 변수가 timedelta입니다.
자 이렇게 현재 시간에서 self. updatetime(이건 제가 모델에 저장한 변수 이름이에요, 업데이트한 시간이 기록된 값입니다. )
의 차이를 구하면 되겠죠?
이 결과값을 출력해보면 다음과 같아요
20 days, 1:16:55.067932
제가 포스팅한지 20일 하고도 1시간 16분 55초가 지났나보네요.
이 시간도 마찬가지로 이렇게 사용 될 수 있어요.
제가 어느 게시글에 댓글을 달았는데 내가 댓글을 단지 얼마나 지났는지,
그리고 이 댓글이 1시간이 넘었다면 '시간'으로, 몇일이 지났다면 '일'로 표시하고 싶을때!
이렇게 표시하려면 우리가 방금 구한 시간차이를 가공해야겠죠?
하지만 여기서 함정!
자 보시면 이 timedelta 변수에서 사용할 수 있는 값은 seconds, microseconds, days 밖에 없어요.
우리가 원하는 minute 라던지 hours는 없네요 ㅠㅠ
이럴때 사칙연산을 이용해서 구하면 됩니다.
만약 우리가 '주' 단위로 시간차이를 끊고 싶을땐
time_difference.days //7 을 하면 됩니다.
만약 포스팅 한지 8일째 됐다면 time_difference.days의 값은 8이 될꺼에요
8//7 은 뭐였죠? 정수 나누기니깐 1이 됩니다.
그래서 우리가 원하는 1주차 라는 값을 얻을 수 있어요.
그럼 시간을 구할때는 초를 구한다음에 3600을 정수나누기 하면 구할수 있겠죠?
time_difference.seconds //3600
이런식으로 말이죠. 정수나누기를 한다면 우리가 불필요한 1.5시간 2.3 시간 이런 소수점이 안나오겠죠?
지금까지 시간 계산하는 방법에 대해서 알아보았습니다.
다음번에도 좋은 포스팅으로 찾아뵙도록 하겠습니다.
'컴퓨터 프로그래밍 > Django' 카테고리의 다른 글
[Django] image 업로드 시 실수 하는 부분 체크! django 에서 사진이 안불러져요. (0) | 2023.11.07 |
---|---|
[Django] media root에 이은 static root 설정과 css분리 방법 정리! (0) | 2023.10.23 |
[Django] 시간, 분, 초 날짜 분리방법, 현재시간과 업데이트된 날짜의 차이를 구하고 싶을때!! timezone, timedelta, datetime (0) | 2023.10.12 |
[Django] settings.py에서 media_url과 media_root 설정 및 ruls.py에서 import 구분하기 (1) | 2023.09.25 |
[Django] 기본중의 기본 python, Django를 들어가기 전에 알아야 될 것들 (0) | 2023.09.05 |