datetime: ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
datetime: ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ
Python์ datetime
[1]๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ์ง์ ์๊ฐ์ ์์ฑ, ์กฐ์, ์ฐ์ฐ ๋ฐ ํฌ๋งทํ
๊ณผ ๊ด๋ จ๋ ๋ค์ํ ํด๋์ค์ ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค. datetime
์ ํ๋ก๊ทธ๋จ์์ ์๊ฐ์ ๊ธฐ๋ฐํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ํ์ํ ๊ด๋ฒ์ํ ๋๊ตฌ๋ฅผ ๊ฐ์ถ๊ณ ์์ด, ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- ๋ ์ง์ ์๊ฐ ์ฒ๋ฆฌ: ๋ ์ง(date), ์๊ฐ(time), ๋ ์ง์ ์๊ฐ์ ์กฐํฉ(datetime), ์๊ฐ ๊ฐ๊ฒฉ(timedelta) ๋ฑ์ ๋ค๋ฃฐ ์ ์๋ ํด๋์ค๋ฅผ ํฌํจํฉ๋๋ค.
- ์๊ฐ๋ ์ธ์:
datetime
์ ์๊ฐ๋๋ฅผ ์ธ์ํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ํ ์๊ฐ๋์ ์๊ฐ์ ์ฒ๋ฆฌํ๊ณ ๋ณํํ ์ ์์ต๋๋ค. - ํธ๋ฆฌํ ๋ ์ง/์๊ฐ ์ฐ์ฐ: ๋ ๋ ์ง/์๊ฐ ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๊ฑฐ๋, ํน์ ๊ธฐ๊ฐ์ ๋ํ๊ณ ๋นผ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
- ๋ค์ํ ํฌ๋งทํ ๊ณผ ํ์ฑ: ๋ ์ง์ ์๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๊ฑฐ๋, ๋ฌธ์์ด์์ ๋ ์ง์ ์๊ฐ์ ํ์ฑํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์ ์ ํฌ๋งท์ ์์ฑํ๊ฑฐ๋ ํ์ค ํฌ๋งท์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import datetime
# ํ์ฌ ๋ ์ง์ ์๊ฐ
now = datetime.datetime.now()
print("Current date and time:", now)
# ํน์ ๋ ์ง ์์ฑ
some_date = datetime.date(2020, 1, 30)
print("Specific date:", some_date)
# ๋ ์ง์ ์๊ฐ ๊ฐ๊ฒฉ ๊ณ์ฐ (timedelta)
ten_days_later = now + datetime.timedelta(days=10)
print("Ten days from now:", ten_days_later)
# ๋ ์ง ํฌ๋งทํ
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("Formatted date and time:", formatted_date)
# ๋ฌธ์์ด๋ก๋ถํฐ ๋ ์ง ํ์ฑ
date_from_string = datetime.datetime.strptime("2024-01-15", "%Y-%m-%d")
print("Parsed date from string:", date_from_string)
- ์๊ฐ ๊ธฐ๋ฐ ๊ธฐ๋ฅ: ์น ์ ํ๋ฆฌ์ผ์ด์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ , ๋ก๊ทธ ๊ด๋ฆฌ ์์คํ ๋ฑ์์ ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์ฒ๋ฆฌ ๋ฐ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ผ์ ๊ด๋ฆฌ ๋ฐ ์์ฝ ์์คํ : ํ์, ์์ฝ, ์ด๋ฒคํธ ๊ด๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ๋ณด๊ณ ์ ์์ฑ: ์๊ฐ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ์ถ์ธ ๋ถ์, ์๊ณ์ด ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ณด๊ณ ์์ ํ์์คํฌํ ์์ฑ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
datetime
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Python์์ ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ๋ฐ ํ์์ ์ธ ๋๊ตฌ์
๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฐ์ฑ๊ณผ ๋ค์ํ ๊ธฐ๋ฅ์ ์๊ฐ ๊ด๋ จ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ์ ๋ถ์์ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค. ์ฌ์ฉ์ ์นํ์ ์ธ API์ ๋ค์ํ ํด๋์ค๋ค์ ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ ๋ ์ง ๋ฐ ์๊ฐ ์ฐ์ฐ์ ์ฝ๊ฒ ์ํํ ์ ์๋๋ก ํ๋ฉฐ, ์ด๋ ํ์ด์ฌ์ ์๊ฐ ๊ด๋ จ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ ํฉํ ์ธ์ด๋ก ๋ง๋ญ๋๋ค.
Arrow: ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
arrow
[2]๋ Python์์ ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, datetime
๋ชจ๋์ ๊ธฐ๋ฅ์ ๋ณด์ํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ API๋ฅผ ์ ๊ณตํฉ๋๋ค. arrow
๋ ์๊ฐ๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ณต์ก์ฑ์ ๋จ์ํํ๊ณ , ๋ค์ํ ๋ ์ง ํ์์ ์ฝ๊ฒ ํ์ฑํ๊ณ ํฌ๋งทํ
ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ, ๋ ์ง์ ์๊ฐ ์์
์ ๋ณด๋ค ์ง๊ด์ ์ด๊ณ ํธ๋ฆฌํ๊ฒ ๋ง๋ญ๋๋ค.
- ์ฌ์ฉ์ ์นํ์ :
arrow
๋datetime
๋ชจ๋๋ณด๋ค ๋ ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ ์ง์ ์๊ฐ์ ์ฝ๊ฒ ์กฐ์ํ๊ณ ํฌ๋งทํ ์ ์์ต๋๋ค. - ์๊ฐ๋ ์ง์:
arrow
๋ ๋ด์ฅ๋ ์๊ฐ๋ ์ง์์ ํตํด ์๊ฐ๋๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ํ ์๊ฐ๋์ ๋ ์ง์ ์๊ฐ์ ์ฝ๊ฒ ๋ณํํ๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. - ๊ตญ์ ํ:
arrow
๋ ๋ค์ํ ์ธ์ด๋ก ๋ ์ง๋ฅผ ํฌ๋งทํ๋ ๊ธฐ๋ฅ์ ์ง์ํ์ฌ, ๊ตญ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. - ์ ์ฐํ ํ์ฑ ๋ฐ ํฌ๋งทํ : ๋ค์ํ ๋ ์ง ๋ฐ ์๊ฐ ํ์์ ์ฝ๊ฒ ํ์ฑํ๊ณ ์ฌ์ฉ์ ์ ์ ํฌ๋งท์ผ๋ก ๋ ์ง๋ฅผ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
pip install arrow
arrow
๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ๋ ์ง์ ์๊ฐ์ ์ป๊ณ , ๋ค๋ฅธ ์๊ฐ๋๋ก ๋ณํํ๋ฉฐ, ๋ค์ํ ํ์์ผ๋ก ๋ ์ง์ ์๊ฐ์ ํฌ๋งทํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
import arrow
# ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ
now = arrow.now()
print("ํ์ฌ ์๊ฐ:", now)
# ํน์ ์๊ฐ๋์ ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ
now_in_tokyo = arrow.now('Asia/Tokyo')
print("๋์ฟ์ ํ์ฌ ์๊ฐ:", now_in_tokyo)
# ๋ ์ง ํ์ฑ
date = arrow.get('2023-01-01', 'YYYY-MM-DD')
print("ํ์ฑ๋ ๋ ์ง:", date)
# ๋ ์ง ํฌ๋งทํ
formatted_date = now.format('YYYY-MM-DD HH:mm:ss')
print("ํฌ๋งท๋ ๋ ์ง:", formatted_date)
# ๋ ์ง ์กฐ์
tomorrow = now.shift(days=+1)
print("๋ด์ผ:", tomorrow)
# ํน์ ์ธ์ด๋ก ๋ ์ง ํฌ๋งทํ
formatted_date_kr = now.format('YYYY๋
MM์ DD์ผ', locale='ko')
print("ํ๊ตญ์ด๋ก ํฌ๋งท๋ ๋ ์ง:", formatted_date_kr)
arrow
๋ Python์์ ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ์์
์ ๋ณด๋ค ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ์๊ฐ๋ ์ฒ๋ฆฌ, ๊ตญ์ ํ, ์ ์ฐํ ๋ ์ง ํฌ๋งทํ
๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ, ๊ฐ๋ฐ์๊ฐ ๋ ์ง์ ์๊ฐ ๊ด๋ จ ์์
์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ๋์ต๋๋ค.
pendulum: ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pendulum
[3]์ ํ์ด์ฌ์ ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. datetime
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ๋์ฒดํ๊ฑฐ๋ ํ์ฅํ๋ฉฐ, ๋ ์ง์ ์๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋์ฑ ์ง๊ด์ ์ด๊ณ ํธ๋ฆฌํ๊ฒ ๋ง๋ญ๋๋ค. pendulum
์ ์๊ฐ๋ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ํ๊ณ , ๋์ฑ ์ ํํ ๋ ์ง ๋ฐ ์๊ฐ ์ฐ์ฐ์ ์ง์ํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ผ์์ ์ผ๋ก ์ง๋ฉดํ๋ ๋ ์ง์ ์๊ฐ์ ๊ด๋ จ๋ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ํฅ์๋ ์๊ฐ๋ ์ง์: ์๊ฐ๋๋ฅผ ๊ฐ๋จํ๊ณ ์ ํํ๊ฒ ์ฒ๋ฆฌ
- ์ฌ๋ ์นํ์ ์ธ ํ์: ๋ ์ง์ ์๊ฐ์ ์ธ๊ฐ์ด ์ฝ๊ธฐ ์ฌ์ด ํ์์ผ๋ก ์ฝ๊ฒ ๋ณํ
- ํ๋ถํ ์ฐ์ฐ ๊ธฐ๋ฅ: ๋ ์ง ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๊ฑฐ๋, ํน์ ๊ธฐ๊ฐ์ ๋ํ๊ณ ๋นผ๋ ๋ฑ์ ์ฐ์ฐ์ ์ง์
- ๋ถ๋ณ์ฑ:
pendulum
์ ๋ ์ง์ ์๊ฐ ๊ฐ์ฒด๋ ๋ถ๋ณ(immutable)์ด๊ธฐ ๋๋ฌธ์, ์์ ํ๊ฒ ์ฌ์ฉ - ๊ตญ์ ํ ์ง์: ๋ค๊ตญ์ด๋ก ๋ ์ง์ ์๊ฐ์ ํ์ํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
pip install pendulum
pendulum
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์๊ฐ์ ํน์ ์๊ฐ๋๋ก ๋ณํํ๊ณ , ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์์ผ๋ก ์ถ๋ ฅํ๋ ์์ ์
๋๋ค:
import pendulum
now = pendulum.now('UTC')
print(now.to_datetime_string())
# ํน์ ์๊ฐ๋๋ก ๋ณํ
seoul = now.in_timezone('Asia/Seoul')
print(seoul.to_datetime_string())
# ์ฌ๋ ์นํ์ ์ธ ํ์์ผ๋ก ์ถ๋ ฅ
print(seoul.to_day_datetime_string())
- ์น ์ ํ๋ฆฌ์ผ์ด์ : ์ฌ์ฉ์์ ๋ก์ปฌ ์๊ฐ๋์ ๋ง์ถฐ ๋ ์ง์ ์๊ฐ์ ํ์ํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์ฒ๋ฆฌ: ์๊ฐ๋๋ฅผ ๊ณ ๋ คํ ๋ ์ง์ ์๊ฐ์ ์ฐ์ฐ์ด ํ์ํ ๋ฐ์ดํฐ ๋ถ์ ์์ ์ ์ ํฉํฉ๋๋ค.
- ์์คํ ์ค์ผ์ค๋ง: ํน์ ์๊ฐ๋์ ๋ฐ๋ฅธ ์์ ์ค์ผ์ค๋ง์ด ํ์ํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
pendulum
์ ํ์ด์ฌ์์ ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ์์
์ ๋ณด๋ค ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ํนํ ์๊ฐ๋ ์ฒ๋ฆฌ์ ๋ถ๋ณ์ฑ์ ์ ๊ณตํจ์ผ๋ก์จ, ๋ ์ง์ ์๊ฐ ๊ด๋ จ ์ฝ๋์ ์ ๋ขฐ์ฑ๊ณผ ์์ ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ค์ํ ํ๋ก์ ํธ์์ ๋ ์ง์ ์๊ฐ ์ฒ๋ฆฌ๊ฐ ํ์์ ์ธ ๊ฒฝ์ฐ, pendulum
์ ๋งค์ฐ ์ ์ฉํ ์ ํ์ด ๋ ๊ฒ์
๋๋ค.
python-dateutil: datetime ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ฅํ
python-dateutil
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณต์กํ ๋ ์ง ๋ฐ ์๊ฐ ๊ณ์ฐ์ ์ํ ํ์ด์ฌ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ datetime
์ ๊ธฐ๋ฅ์ ํ์ฅํฉ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์ํ ๋ ์ง/์๊ฐ ํฌ๋งท์ ํ์ฑ, ์๋์ ๋ฐ ์ ๋์ ๋ ์ง/์๊ฐ ๊ณ์ฐ, ์๊ฐ๋ ์ฒ๋ฆฌ ๋ฑ์ ์ฝ๊ฒ ํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ค์ํ ๋ ์ง ๋ฐ ์๊ฐ ๊ด๋ จ ์์
์ ์ํํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์์ด์ ์ ์ฉํ ๋๊ตฌ์
๋๋ค.
- ๋ ์ง/์๊ฐ ํฌ๋งท ํ์ฑ: ๋ค์ํ ๋ฌธ์์ด ํฌ๋งท์ ๋ ์ง ๋ฐ ์๊ฐ์ ํ์ด์ฌ
datetime
๊ฐ์ฒด๋ก ๋ณํํฉ๋๋ค. - ์๋์ ๋ฐ ์ ๋์ ๋ ์ง/์๊ฐ ๊ณ์ฐ: ๋ ์ง ๋ฐ ์๊ฐ์ ๋ง์ , ๋บ์ ๊ณผ ๊ฐ์ ๊ณ์ฐ์ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
- ์๊ฐ๋ ์ฒ๋ฆฌ: ์๊ฐ๋๋ฅผ ๊ณ ๋ คํ ๋ ์ง ๋ฐ ์๊ฐ ๊ณ์ฐ์ ์ง์ํฉ๋๋ค.
- ๋ณต์กํ ๊ท์น์ ์ฌ์ฉํ ๋ฐ๋ณต ๋ฐ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ: ์๋ฅผ ๋ค์ด, "๋งค์ ๋ง์ง๋ง ๊ธ์์ผ"๊ณผ ๊ฐ์ ๋ณต์กํ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
python-dateutil
์ pip๋ฅผ ํตํด ์ฝ๊ฒ ์ค์นํ ์ ์์ต๋๋ค. ์ค์น๋ฅผ ์ํด ํฐ๋ฏธ๋์ด๋ ๋ช
๋ น ํ๋กฌํํธ์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํฉ๋๋ค.
pip install python-dateutil
๋ฌธ์์ด ํฌ๋งท์ ๋ ์ง๋ฅผ ํ์ฑํ์ฌ datetime
๊ฐ์ฒด๋ก ๋ณํํ๋ ์์ ์
๋๋ค.
from dateutil import parser
date_string = "2023-04-01 12:34:56"
date_obj = parser.parse(date_string)
print(date_obj)
์ด ์ฝ๋๋ ๋ฌธ์์ด "2023-04-01 12:34:56"
์ ํ์ฑํ์ฌ datetime
๊ฐ์ฒด๋ก ๋ณํํ๊ณ ์ถ๋ ฅํฉ๋๋ค.
- ๋ ์ง/์๊ฐ ๋ฐ์ดํฐ์ ํ์ฑ ๋ฐ ๋ณํ: ๋ก๊ทธ ํ์ผ, ์ฌ์ฉ์ ์ ๋ ฅ ๋ฑ ๋ค์ํ ์์ค์์ ์ป์ ๋ ์ง ๋ฐ ์๊ฐ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ผ์ ๊ด๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ : ๋ฐ๋ณต๋๋ ์ผ์ , ์๊ฐ๋๋ฅผ ๊ณ ๋ คํ ์ผ์ ๊ณ์ฐ ๋ฑ์ ์ํํ ๋ ์ ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์๊ฐํ: ์๊ฐ๋๋ฅผ ๊ณ ๋ คํ ์๊ณ์ด ๋ฐ์ดํฐ ๋ถ์, ๋ ์ง/์๊ฐ ๊ด๋ จ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค.
python-dateutil
์ ๋ ์ง ๋ฐ ์๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ๋ณต์กํ ๋ ์ง/์๊ฐ ๊ณ์ฐ๊ณผ ํฌ๋งท ๋ณํ, ์๊ฐ๋ ์ฒ๋ฆฌ ๋ฑ์ ์ฝ๊ฒ ํ ์ ์์ด, ๋ค์ํ ํ์ด์ฌ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์์ด ํ์์ ์ธ ๋๊ตฌ๋ก ํ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์๊ฐ ๊ด๋ จ ๋ก์ง์ ๋์ฑ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
zoneinfo, pytz: IANA ์๊ฐ๋ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
IANA ์๊ฐ๋ ํํ์ ์ํ pytz์ zoneinfo์ ๋น๊ต
ํน์ง | pytz | zoneinfo (Python 3.9 ์ด์) |
---|---|---|
์ค์น | ๋ณ๋ ์ค์น ํ์ (pip install pytz ) | ๊ธฐ๋ณธ ์ ๊ณต (Python 3.9 ์ด์) |
์ฌ์ฉ๋ฒ | ์๊ฐ๋ ์ค์ ์ replace ๋ฉ์๋ ์ฌ์ฉ | datetime ๊ฐ์ฒด์ ์ง์ ์๊ฐ๋ ์ง์ ๊ฐ๋ฅ |
ํตํฉ์ฑ | datetime ๋ชจ๋๊ณผ ํตํฉ ๊ฐ๋ฅ | datetime ๋ชจ๋๊ณผ ์์ฐ์ค๋ฝ๊ฒ ํตํฉ |
์๊ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค | Olson/IANA ์๊ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ | IANA ์๊ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ |
ํธํ์ฑ | Python 3.9 ์ด์ ๋ฒ์ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ | Python 3.9 ์ด์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ |
์ ์ง ๊ด๋ฆฌ | ์ปค๋ฎค๋ํฐ์์ ์ ์ง ๊ด๋ฆฌ | Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ์ง ๊ด๋ฆฌ |
์ ์์ ์๊ฒฌ:
- Python 3.9 ์ด์:
zoneinfo
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐํธํ๊ณ ์์ฐ์ค๋ฌ์. - Python 3.9 ๋ฏธ๋ง:
pytz
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉ.
pytz
: Olson/IANA ์๊ฐ๋ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pytz
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Python์์ ์๊ฐ๋(time zone)๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ธ๊ณ์ ๋ชจ๋ ์๊ฐ๋๋ฅผ ์ง์ํ๋ฉฐ, ํ์ค ์๊ฐ๋์ ์ผ๊ด ์ ์ฝ ์๊ฐ์ ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. Python์ ๊ธฐ๋ณธ datetime ๋ชจ๋๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ํน์ ์๊ฐ๋์ ์๊ฐ์ ์ ํํ๊ฒ ๊ด๋ฆฌํ๊ณ ๋ณํํ ์ ์์ต๋๋ค.
- ์ ์ธ๊ณ์ ๋ชจ๋ ์๊ฐ๋ ์ง์
- ํ์ค ์๊ฐ๋์ ์ผ๊ด ์ ์ฝ ์๊ฐ์ ์๋ ๊ด๋ฆฌ
- ์๊ฐ๋ ๋ณํ ๊ธฐ๋ฅ ์ ๊ณต
- datetime ๊ฐ์ฒด์์ ํตํฉ
pytz
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ pip๋ฅผ ํตํด ์ฝ๊ฒ ์ค์นํ ์ ์์ต๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์์ต๋๋ค:
pip install pytz
pytz๋ฅผ ์ฌ์ฉํ๋ ์์ ์ฝ๋๋ฅผ ํตํด ์๊ฐ๋๋ฅผ ์ค์ ํ๊ณ ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
import pytz
from datetime import datetime
# ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ (UTC ๊ธฐ์ค)
utc_now = datetime.utcnow()
print(f"ํ์ฌ UTC ์๊ฐ: {utc_now}")
# ๋ด์ ์๊ฐ๋๋ก ๋ณํ
new_york_tz = pytz.timezone('America/New_York')
new_york_time = utc_now.replace(tzinfo=pytz.utc).astimezone(new_york_tz)
print(f"๋ด์ ์๊ฐ: {new_york_time}")
# ์์ธ ์๊ฐ๋๋ก ๋ณํ
seoul_tz = pytz.timezone('Asia/Seoul')
seoul_time = utc_now.replace(tzinfo=pytz.utc).astimezone(seoul_tz)
print(f"์์ธ ์๊ฐ: {seoul_time}")
zoneinfo
: IANA ์๊ฐ๋ ์ง์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
zoneinfo
[4] ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Python 3.9 ๋ฒ์ ๋ถํฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ๋ก ์ถ๊ฐ๋ ๋ชจ๋๋ก, IANA ์๊ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๊ฐ๋ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๋ ๋ค์ํ ์๊ฐ๋์ ๋ํ ์ ํํ ์๊ฐ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์๊ฐ๋ ๋ณํ๊ณผ ๊ด๋ จ๋ ๋ณต์ก์ฑ์ ๊ฐ์ํํ ์ ์์ต๋๋ค.
- ์๊ฐ๋ ์ง์:
zoneinfo.ZoneInfo
ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๊ณ์ ๋ค์ํ ์๊ฐ๋ ์ ๋ณด๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค. - ์๋ ์ ๋ฐ์ดํธ: ์์คํ ์๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, IANA ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ์๋์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
- ํธํ์ฑ: Python์
datetime
๋ชจ๋๊ณผ ์๋ฒฝํ๊ฒ ํธํ๋์ด, ์๊ฐ๋๋ฅผ ๊ณ ๋ คํ ๋ ์ง ๋ฐ ์๊ฐ ๊ณ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
Python 3.9 ์ด์์์๋ ๋ณ๋์ ์ค์น ๊ณผ์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง Python 3.9 ๋ฏธ๋ง ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ pip install backports.zoneinfo
๋ก ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
from datetime import datetime
from zoneinfo import ZoneInfo
# ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ (UTC ๊ธฐ์ค)
utc_now = datetime.utcnow()
print(f"ํ์ฌ UTC ์๊ฐ: {utc_now}")
# ๋ด์ ์๊ฐ๋๋ก ๋ณํ
new_york_time = utc_now.replace(tzinfo=ZoneInfo('America/New_York'))
print(f"๋ด์ ์๊ฐ: {new_york_time}")
# ์์ธ ์๊ฐ๋๋ก ๋ณํ
seoul_time = utc_now.replace(tzinfo=ZoneInfo('Asia/Seoul'))
print(f"์์ธ ์๊ฐ: {seoul_time}")
- ๊ธ๋ก๋ฒ ์ด๋ฒคํธ ์ค์ผ์ค๋ง: ๋ค๊ตญ์ ํ์ฌ์์ ์ ์ธ๊ณ ์ง์๋ค์ ์ํ ํ์ ์๊ฐ์ ์กฐ์ ํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ก๊ทธ ๋ฐ์ดํฐ ๊ด๋ฆฌ: ์๋ฒ ๋ก๊ทธ ๋ฐ์ดํฐ์ ์๊ฐ๋๋ฅผ ํตํฉํ์ฌ ๋ถ์ํ ๋ ์ ์ฉํฉ๋๋ค.
- ์ฌํ ์ฑ ๊ฐ๋ฐ: ์ฌ์ฉ์์ ํ์ง ์๊ฐ๊ณผ ์ฌํ ๋ชฉ์ ์ง์ ์๊ฐ์ ํ์ํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋ ํ์ฉ๋ฉ๋๋ค.
pytz
์ zoneinfo
๋ ๋ชจ๋ ์๊ฐ๋ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. Python 3.9 ์ด์์ ์ฌ์ฉํ๋ค๋ฉด zoneinfo๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐํธํ๊ณ ์์ฐ์ค๋ฌ์ธ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ pytz๋ ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, Python 3.9 ์ด์ ๋ฒ์ ์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ๊ณผ Python ๋ฒ์ ์ ๋ฐ๋ผ ์ ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.