유닉스 타임스탬프란?
유닉스 타임스탬프(에포크 시간 또는 POSIX 시간이라고도 합니다)는 1970년 1월 1일 00:00:00 UTC, 즉 '유닉스 에포크(Unix epoch)'를 기준으로 흘러간 초(秒)의 수입니다. 윤초는 계산에 포함하지 않습니다. 컴퓨터가 특정 시점을 시간대(타임존)와 무관하게 하나의 숫자로 저장하는 보편적인 방식이죠. 이 계산기는 밀리초 단위 값을 표준 유닉스 타임스탬프(초 단위)로 변환해 주며, 에포크 이후 경과한 분·시간·일수도 함께 보여줍니다.
사용 방법
시간 값을 밀리초 단위로 입력하세요. 현재 유닉스 타임스탬프('epoch now')를 구하려면 현재 시각을 밀리초로 넣으면 됩니다. 기본값은 예시로 채워져 있습니다. 계산기는 입력값을 1,000으로 나눈 뒤 소수점 이하를 버려(내림) 정수 초를 만들어 줍니다. 이 형식은 거의 모든 API, 데이터베이스, 프로그래밍 언어가 요구하는 표준 형식입니다.
공식 설명
핵심 변환식은 다음과 같습니다.
$$\text{Epoch} = \left\lfloor \dfrac{\text{Time (ms)}}{1000} \right\rfloor$$밀리초는 1,000분의 1초까지 표현하지만 전통적인 유닉스 타임스탬프는 정수 초 단위이므로, 소수 부분을 버리는 내림(floor) 연산을 적용합니다. 여기서 에포크 값을 각각 60, 3,600, 86,400으로 나누면 분, 시간, 일수가 됩니다.
$$\begin{gathered} \text{Epoch} = \left\lfloor \dfrac{\text{Time (ms)}}{1000} \right\rfloor \\[1.5em] \text{where}\quad \left\{ \begin{aligned} \text{Minutes} &= \left\lfloor \tfrac{\text{Epoch}}{60} \right\rfloor \\ \text{Hours} &= \left\lfloor \tfrac{\text{Epoch}}{3600} \right\rfloor \\ \text{Days} &= \left\lfloor \tfrac{\text{Epoch}}{86400} \right\rfloor \end{aligned} \right. \end{gathered}$$
계산 예시
현재 시각이 1,700,000,000,000밀리초라고 가정해 봅시다. 이 값을 1,000으로 나누면 1,700,000,000초가 되며, 이것이 바로 유닉스 타임스탬프입니다.
$$\left\lfloor \frac{1{,}700{,}000{,}000{,}000}{1000} \right\rfloor = 1{,}700{,}000{,}000 \text{ s}$$다시 1,700,000,000을 86,400으로 나눈 뒤 내림하면 1970년 1월 1일 이후 19,675일이 지난 것이 되는데, 이는 2023년 11월 중순에 해당합니다.
$$\left\lfloor \frac{1{,}700{,}000{,}000}{86{,}400} \right\rfloor = 19{,}675 \text{ days}$$자주 묻는 질문
왜 밀리초가 아니라 초를 쓰나요? 원래 유닉스 표준이 초 단위를 사용하기 때문입니다. JavaScript의 Date.now()는 밀리초를 반환하므로, 보통 1,000으로 나눠서 초로 바꿉니다.
시간대(타임존)는 어떻게 처리되나요? 처리할 필요가 없습니다. 유닉스 시간은 항상 UTC 기준입니다. 같은 순간이라면 지구상 어디서든 동일한 타임스탬프를 갖습니다.
'2038년 문제'란 무엇인가요? 타임스탬프를 부호 있는 32비트 정수로 저장하는 시스템은 2038년 1월 19일에 오버플로가 발생합니다. 최신 64비트 시스템에서는 이 문제가 발생하지 않습니다.