TIME-ZONE
์ฅ๊ณ ํ๋ก์ ํธ ํ์ผ์ settings.py์๋ ์๊ฐ๋์ ๊ด๋ จ๋ ์ค์ ์ ํ ์ ์๋ ๋ํ์ ์ธ ๋ณ์๋ก์ TIME_ZONE๊ณผ USE_TZ๊ฐ ์กด์ฌํ๋ค.
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()
datetime.now(pytz.UTC)
timezone.now()
timezone.localtime(datetime.now(pytz.UTC)
timezone.localtime(timezone.now())
timezone.make_aware(datetime.now())
<์ฐธ๊ณ >