์ ๋์ค ์๊ฐ์ด๋?
์ ๋์ค ์๊ฐ(UNIX ํ์์คํฌํ ๋๋ POSIX ์๊ฐ์ด๋ผ๊ณ ๋ ํฉ๋๋ค)์ ์ ๋์ค ์ํฌํฌ์ธ 1970-01-01 00:00:00 UTC๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ฌ๊ฐ ์ด์ ๋์ ๊ฐ์ ๋๋ค. ํน์ ์๊ฐ์ ํ๋์ ์ ์๋ก ํํํ๋ ๋ณดํธ์ ์ด๊ณ ์ธ์ด ์ค๋ฆฝ์ ์ธ ๋ฐฉ์์ผ๋ก, ๋ก๊ทธยท๋ฐ์ดํฐ๋ฒ ์ด์คยทAPIยทํ๋ก๊ทธ๋๋ฐ ๋ฑ ์ปดํจํ ์ ๋ฐ์์ ๋๋ฆฌ ์ฐ์ ๋๋ค. ์ค์ด๋ ๋ฐ์ํ์ง ์์ผ๋ฉฐ, ํ๋ฃจ๋ ์ธ์ ๋ ์ ํํ 86,400์ด๋ก ๊ณ์ฐํฉ๋๋ค.
๊ณ์ฐ๊ธฐ ์ฌ์ฉ๋ฒ
๋ฒฝ์๊ณ์ ํ์๋๋ ๊ทธ๋๋ก์ ๋ ์ง(์ฐยท์ยท์ผ)์ ์๊ฐ(์ยท๋ถยท์ด)์ ์ ๋ ฅํ์ธ์. ๊ทธ๋ฐ ๋ค์ "UTC์์ ์์ฐจ"์ ํด๋น ์ง์ญ ์๊ฐ์ ์๊ฐ๋ ์คํ์ ์ ์๊ฐ ๋จ์๋ก ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ณธ์ +9, ์ธ๋๋ +5.5, ๋ฏธ๊ตญ ํํ์ ํ์ค์(PST)๋ -8์ ๋๋ค. ์ฐธ๊ณ ๋ก ํ๊ตญ ํ์ค์(KST)๋ +9์ ๋๋ค. ๊ธฐ๋ณธ ์คํ์ ์ +9(์ผ๋ณธ ์๊ฐ)๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ยท๋ถยท์ด๋ฅผ ๋น์ ๋๋ฉด 0์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
๊ณต์ ์ค๋ช
๋จผ์ ๋ ์ง๋ฅผ days-from-civil ์๊ณ ๋ฆฌ์ฆ(Howard Hinnant ๊ณ ์)์ ์ฌ์ฉํด ์ผ์๋ก ๋ณํํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ ๊ณผ 1970๋ ์ด์ ๋ ์ง๋ฅผ ํฌํจํ ๋ชจ๋ ๊ทธ๋ ๊ณ ๋ฆฌ๋ ฅ ๋ ์ง์ ๋ํด ์ํฌํฌ ๊ธฐ์ค ์ผ์๋ฅผ ์ ํํ ๊ณ์ฐํฉ๋๋ค. ๊ทธ ์ผ์์ 86,400์ ๊ณฑํ๊ณ ์ยท๋ถยท์ด๋ฅผ ๋ํ๋ฉด ํ์ง ์๊ฐ ๊ธฐ์ค์ผ๋ก 1970-01-01 00:00:00๋ถํฐ์ ์ด๊ฐ ๋ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก UTC ์คํ์ (์๊ฐ ร 3600)์ ๋นผ์ ๊ฒฐ๊ณผ๋ฅผ UTC ๊ธฐ์ค์ผ๋ก ๋ณด์ ํฉ๋๋ค.
$$ \begin{gathered} t = 86400 \cdot D + 3600\,\text{Hour} + 60\,\text{Minute} + \text{Second} - 3600\,\text{UTC Offset} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} D &= \text{days from } 1970\text{-}01\text{-}01 \text{ to the chosen date} \\ \text{date} &= \left(\text{Year},\ \text{Month},\ \text{Day}\right) \end{aligned} \right. \end{gathered} $$
๊ณ์ฐ ์์
์คํ์ +9์์ 2025-06-15 00:00:00์ ๋ณํํ๋ฉด: daysSinceEpoch = 20254์ด๋ฏ๋ก \(\text{localSeconds} = 20254 \times 86400 = 1{,}749{,}945{,}600\)์ ๋๋ค. ์ฌ๊ธฐ์ \(9 \times 3600 = 32{,}400\)์ ๋นผ๋ฉด ์ ๋์ค ์๊ฐ 1,749,913,200์ด ๋๋ฉฐ, ์ด๋ 2025-06-14 15:00:00 UTC์ ํด๋นํฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์์ ์คํ์ ์ธ๋ฐ ์ ํ์์คํฌํ๊ฐ ์์๋ณด๋ค ์๊ฒ ๋์ค๋์? UTC๋ณด๋ค ์์ ํ์ง ์๊ฐ์ ๋ ์ด๋ฅธ UTC ์๊ฐ์ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ๋ฒฝ์๊ณ ๊ฐ์ UTC๋ก ๊ทธ๋๋ก ์ฝ์์ ๋๋ณด๋ค ์ ๋์ค ๊ฐ์ด ๋ ์์์ง๋๋ค.
1970๋ ์ด์ ๋ ์ง๋ ์ฒ๋ฆฌํ ์ ์๋์? ๋ค, ๊ฒฐ๊ณผ๊ฐ ๋จ์ํ ์์๋ก ๋์ฌ ๋ฟ์ ๋๋ค. 1969-12-31 23:59:59 UTC๋ \(-1\)์ ๋๋ค.
์ค์ด๊ฐ ํฌํจ๋๋์? ์๋์. ํ๋ฃจ๋ฅผ ์ ํํ 86,400์ด๋ก ๋ณด๋ ํ์ค POSIX ์ ์๋ฅผ ๋ฐ๋ฆ ๋๋ค.