[210727 TIL - (1)] Django

Choi Rimยท2021๋…„ 7์›” 27์ผ
0

Django

๋ชฉ๋ก ๋ณด๊ธฐ
14/21
post-thumbnail

TIME-ZONE

์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์˜ settings.py์—๋Š” ์‹œ๊ฐ„๋Œ€์™€ ๊ด€๋ จ๋œ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ณ€์ˆ˜๋กœ์„œ TIME_ZONE๊ณผ USE_TZ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Seoul'

USE_I18N = True

USE_L10N = True

USE_TZ = True
  • ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์˜ settings.py์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜๋“ค์ด ์กด์žฌํ•œ๋‹ค.

datetime ๊ฐ์ฒด์˜ ์ข…๋ฅ˜

Naive ๊ฐ์ฒด

  • tzinfo ์†์„ฑ์ด ์„ค์ •๋˜์ง€ ์•Š์€ datetime ๊ฐ์ฒด
    • TIME_ZONE ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ ์‹œ๊ฐ„๋Œ€ ์‚ฌ์šฉ

Aware ๊ฐ์ฒด

  • tzinfo ์†์„ฑ์ด ์„ค์ •๋œ datetime ๊ฐ์ฒด
    • ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ์ค€์ด ๋˜๋Š” ์‹œ๊ฐ„๋Œ€๋ฅผ tzinfo ์†์„ฑ์œผ๋กœ ์ง€์ •

USE_TZ ์„ค์ •์— ๋”ฐ๋ฅธ ์ฐจ์ด

USE_TZ = False

  • ์žฅ๊ณ ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Naive ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฆ‰ ์žฅ๊ณ  ๊ฐœ๋ฐœ์‹œ Naive Datetime ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • ๊ธฐ์ค€ ์‹œ๊ฐ„๋Œ€ => TIME_ZONE

USE_TZ = True

  • ์žฅ๊ณ ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Aware datetime ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฆ‰ ์žฅ๊ณ  ๊ฐœ๋ฐœ ์‹œ Aware datetime ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ธฐ์ค€ ์‹œ๊ฐ„๋Œ€๋ฅผ ๋ช…ํ™•ํžˆ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ํผ์— ์ž…๋ ฅ๋œ ๋‚ ์งœ ๊ฐ’์€ Current time zone์œผ๋กœ ํ•ด์„ํ•œ ๋’ค Aware datetime ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋˜๊ณ , ํ…œํ”Œ๋ฆฟ์— ๋ Œ๋”๋งํ•  ๋•Œ๋Š” Aware datetime ๊ฐ์ฒด๋ฅผ Current time zone์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

โ€ป ๋งŒ์•ฝ Naive datetime ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

  • ํ•˜์œ„ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด Naive datetime ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋„๋ก ์„ค๊ณ„๊ฐ€ ๋˜์–ด ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋  ๋•Œ Naive datetime ๊ฐ์ฒด๋ฅผ Aware datetime ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๊ฒฝ๊ณ ๋งŒ ๋„์›Œ์ค€๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ๋„ DST ๋“ฑ์œผ๋กœ ์ธํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์—ฌ์ง€๋Š” ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•ญ์ƒ Aware datetime ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•˜๋‹ค.

๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

from datetime import datetime, date, timedelta
from django.utils import timezone
import pytz

datetime.now()  # Naive (TIME_ZONE)

datetime.now(pytz.UTC)  # Aware (UTC)

timezone.now()  # Aware (UTC)

timezone.localtime(datetime.now(pytz.UTC)  # Aware (UTC) โ†’ Aware (TIME_ZONE)

timezone.localtime(timezone.now())  # Aware (UTC) โ†’ Aware (TIME_ZONE)

timezone.make_aware(datetime.now())  # Naive (TIME_ZONE) โ†’ Aware (TIME_ZONE)

<์ฐธ๊ณ >

profile
https://rimi0108.github.io/

0๊ฐœ์˜ ๋Œ“๊ธ€