유닉스 타임스탬프 변환 쉽게 이해하기 — 개념과 원리
유닉스 시간은 기준 시각인 1970년 1월 1일 0시 0분 0초(UTC)부터 흐른 초를 센 값입니다. 숫자 하나로 시간대와 상관없이 저장·비교·정렬할 수 있어 운영 체제, 데이터베이스, 로그, API, JWT 토큰 등 대부분의 시스템이 이 방식을 씁니다. 이 도구는 유닉스 타임스탬프를 UTC 날짜, 현지 시각, 밀리초로 바꾸고, 부호 있는 32비트 카운터가 2038년 1월에 넘치기까지 남은 초도 보여 줍니다.
계산 방법
- UTC 날짜: 타임스탬프를 하루 86,400초 단위의 일수와 나머지 초로 나눈 뒤, 1970-01-01부터 그레고리력으로 날짜를 셉니다.
- 현지 시각: 같은 순간을 사용 중인 기기의 시간대와 일광 절약 시간 규칙으로 표시합니다.
- 밀리초: 초 × 1000으로, 자바스크립트 Date와 자바 System.currentTimeMillis()가 쓰는 단위입니다.
- 2038년 오버플로까지 남은 초: 2,147,483,647 − 타임스탬프이며, 2³¹ − 1 = 2,147,483,647은 부호 있는 32비트 정수의 최댓값입니다.
원리
타임스탬프는 벽시계의 숫자가 아니라 '순간'을 가리키므로 지구 어디서나 같은 값이고, 시간대는 표시할 때만 적용됩니다. POSIX는 하루를 정확히 86,400초로 정의하고 윤초를 무시해 날짜 계산을 단순하게 유지합니다. 2038년 한계는 저장 방식에서 옵니다. 부호 있는 32비트 time_t는 2038-01-19 03:14:07 UTC에 해당하는 2,147,483,647까지만 셀 수 있고, 1초 뒤에는 −2³¹로 돌아가 1901-12-13 20:45:52 UTC로 읽힙니다.
예제 풀이
- 입력은 1794182400입니다.
- 1794182400 ÷ 86400 = 20766일로 나머지가 없으므로 시각은 자정입니다.
- 1970-01-01부터 20766일을 세면 2026-11-09 00:00:00 UTC입니다.
- 한국 표준시(UTC+9)로는 11/9/2026, 9:00:00 AM이며, 다른 시간대에서는 그곳의 현지 시각으로 보입니다.
- 밀리초는 1,794,182,400,000이고, 넘치기까지 2,147,483,647 − 1,794,182,400 = 353,301,247초, 약 4,089일(11.2년)이 남았습니다.
결과 해석
요즘 날짜라면 10자리 숫자는 초, 13자리 숫자는 밀리초일 가능성이 큽니다. 음수 타임스탬프는 1970년 이전의 날짜입니다. 결과가 수만 년 뒤로 나온다면 밀리초 값을 초로 넣었을 가능성이 높습니다.
흔한 실수
- 시스템마다 초와 밀리초를 섞어 쓰는 것(유닉스 도구와 자바스크립트)
- 타임스탬프 자체에 시차를 더하는 것(시차는 표시하는 날짜에만 적용합니다)
- 유닉스 시간이 윤초를 포함한다고 생각하는 것
자주 묻는 질문
1970-01-01 00:00:00 UTC의 타임스탬프는 무엇입니까?
0이며, 하루 뒤는 86400입니다.
일광 절약 시간이 타임스탬프를 바꿉니까?
아닙니다. 현지 표시만 달라지고 타임스탬프는 1초에 1씩 계속 늘어납니다.
2038년 문제는 해결되었습니까?
최신 64비트 시스템은 대부분 64비트 time_t를 써서 사실상 문제가 없지만, 오래된 소프트웨어와 데이터 형식은 점검이 필요합니다.
출처: IEEE Std 1003.1 (POSIX), Base Definitions, Seconds Since the Epoch · IETF RFC 3339, Date and Time on the Internet: Timestamps