PC·모바일 문제 해결
Unix Timestamp가 1970년으로 나오는 이유: 초와 밀리초 차이
Unix timestamp를 날짜로 바꿨더니 1970년이 나온다면, 초와 밀리초 단위가 엇갈렸을 가능성이 큽니다. 단위를 확인하고 바르게 변환하는 방법을 정리합니다.
Unix timestamp를 날짜로 바꿨더니 1970년 근처가 나온다면, 단위를 잘못 해석한 경우가 많다.
Unix timestamp는 흔히 초(seconds) 단위이고, JavaScript Date는 흔히 밀리초(milliseconds) 단위다.
요즘 날짜의 10자리 값은 초인 경우가 많고, 13자리 값은 밀리초인 경우가 많다. 단위가 맞지 않으면 1,000을 곱하거나 나누면 된다.
Timestamp를 날짜로 바꿨더니 1970년 1월이 나왔다. 시계가 고장난 경우는 드물다. 초로 저장된 값을 밀리초로 읽었거나, 그 반대인 경우가 대부분이다. 이 글에서는 단위를 구분하고 변환하는 방법을 바로 확인한다.
Unix Timestamp란?
Unix timestamp는 Unix epoch인 1970-01-01 00:00:00 UTC 이후 경과한 시간을 나타낸다. 흔히 초 단위를 쓴다. 같은 시각을 밀리초(초 × 1,000)로 저장하기도 한다. 숫자 자체에는 단위가 적혀 있지 않다.
초와 밀리초: 1,000배 차이
1초는 1,000밀리초다. 그래서 같은 시각이 1,000배 차이나는 두 숫자로 보일 수 있다. 1720000000와 1720000000000를 비교해 보자. 앞이 초이고 뒤가 밀리초이면 같은 순간이다. 앞 숫자를 밀리초로 읽으면 날짜가 1970년 쪽으로 떨어진다.
아래 UTC 결과는 위 숫자로 계산한 값이다. 추측이 아니다.
| 값 | 가능성 높은 단위 | 해석 (UTC) |
|---|---|---|
| 1720000000 | 초 | 초로 읽으면 요즘 날짜: 2024-07-03 09:46:40 UTC |
| 1720000000000 | 밀리초 | 밀리초로 읽으면 같은 시각: 2024-07-03 09:46:40 UTC |
| 1720000000를 밀리초로 해석 | 잘못된 단위 | 1970년 근처: 1970-01-20 21:46:40 UTC |
왜 1970년으로 나올까?
초 값을 밀리초로 처리하면 숫자가 필요한 값보다 1,000배 작아진다. JavaScript는 Unix epoch 이후 짧은 시간만 센 것으로 보고, 날짜가 1970년에 머문다. Date 생성자의 숫자는 밀리초이므로 이런 실수가 흔하다:
const seconds = 1720000000;
new Date(seconds);
// 1970-01-20 21:46:40 UTC
new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC
1970년 결과는 epoch에서 보름 남짓 지난 시각이지, 무작위 오류가 아니다. Date에 넘기기 전에 초에 1,000을 곱한다. 시스템이 Unix 초를 기대하면 밀리초를 1,000으로 나눈다.
- 초 (SECONDS)
- 1720000000
- 밀리초 (MILLISECONDS)
- 1720000000000
- 초 값
- 밀리초로 잘못 해석
- 1970년 근처 날짜
결과가 1970년 근처라면, 시간대를 의심하기 전에 timestamp 단위부터 확인하세요.
10자리는 초, 13자리는 밀리초일까?
요즘 날짜에서는 10자리가 초, 13자리가 밀리초인 경우가 많다. 빠른 힌트일 뿐, 검증 규칙은 아니다. 자리수는 시간 범위에 따라 달라진다. 이른 날짜의 초 값은 자릿수가 더 적고, 어떤 API는 마이크로초나 나노초를 쓴다. 자리수만으로 단정하지 말고, 문서나 말이 되는 날짜로 확인하세요.
JavaScript에서 특히 자주 일어나는 이유
JavaScript에서 Date의 숫자 timestamp는 epoch 이후 밀리초다. 백엔드, 데이터베이스, Unix 도구는 여전히 초를 쓰는 경우가 많다. 초 값을 Date에 그대로 넣으면 버그가 난다:
const unixSeconds = 1720000000;
const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);
wrong은 1970년 근처(1970-01-20 21:46:40 UTC)다. correct가 의도한 요즘 시각(2024-07-03 09:46:40 UTC)이다.
다른 시스템은 단위가 다를 수 있다
다른 언어, API, 데이터베이스는 초를 쓰기도 하고 밀리초를 쓰기도 한다. 마이크로초나 나노초를 쓰는 시스템도 있다. 어떤 언어가 항상 한 단위만 쓴다고 단정하지 마세요. 가장 확실한 방법은 API나 데이터베이스 문서를 확인하는 것이다. 숫자가 JSON 안에 있다면 JSON 정리·검사·비교로 필드를 읽기 쉽게 만들 수 있다. 다만 단위까지 알려 주지는 않는다.
내 timestamp가 어떤 단위인지 어떻게 알까?
아래 순서로 확인하세요. 자리수만으로는 부족하다.
- API 또는 데이터베이스 문서를 확인한다.
- 대략적인 자릿수를 본다.
- 요즘 날짜의 timestamp와 크기를 비교한다.
- 초로 해석한 결과와 밀리초로 해석한 결과를 비교한다.
- 나온 날짜가 말이 되는지 본다.
한쪽은 1970년이고 다른 쪽은 아는 날짜라면, 원인이 단위 불일치다.
Unix Timestamp에서 흔한 실수
- 초를 밀리초로 해석. 위 예처럼 날짜가 1970년 쪽으로 접힌다.
- 밀리초를 초로 해석. 날짜가 먼 미래로 가거나 변환이 실패한다.
- 1,000을 두 번 곱함. 이미 밀리초인 값이 커져 날짜가 수백 년 뒤로 간다.
- 1,000을 두 번 나눔. 초 값이 다시 줄어 1970년 근처로 돌아간다.
- 시간대 문제로 착각. 시간대는 시각이나 달력 날짜를 옮길 수 있다. 요즘 timestamp를 1970년으로 만들지는 않는다.
- 날짜 문자열을 Unix timestamp로 취급. 2024-07-03T09:46:40Z 같은 값은 epoch 숫자가 아니다. 초가 아니라 날짜 문자열로 파싱해야 한다.
시간대 때문에 1970년이 나오나?
보통은 아니다. 시간대는 화면에 보이는 시각을 바꾸고, 자정 근처면 달력 날짜도 바꿀 수 있다. 요즘 Unix timestamp를 1970년 근처로 만들지는 않는다. 결과가 1970년이면 초/밀리초부터 확인하고, 그다음에 시간대를 본다.
Unix Timestamp 변환하고 확인하기
NEXNARA 날짜·시간·Unix Timestamp 변환로 브라우저에서 Unix timestamp를 변환할 수 있다.
Unix 초나 밀리초를 붙여 넣고, 현재 timestamp를 쓰고, UTC와 로컬 시각을 보고, 시간대를 변환하고, 날짜 형식을 바꿀 수 있다. 자동 감지는 보통 10자리를 초, 13자리를 밀리초로 본다. 단위는 직접 고를 수도 있다.
변환 자체는 브라우저에서 이뤄진다. 이 도구에서는 날짜와 timestamp를 NEXNARA 서버로 보내지 않는다. 광고와 다른 사이트 기능은 네트워크를 쓴다. 그건 변환과 별개다.
Unix timestamp를 확인해 보려면 날짜·시간·Unix Timestamp 변환를 열고 초와 밀리초를 비교해 보세요.
FAQ
Unix timestamp가 왜 1970년으로 나오나요?
초 값을 밀리초로 읽은 경우가 많다. JavaScript는 훨씬 작은 숫자로 처리하므로 날짜가 1970-01-01 00:00:00 UTC 직후로 온다. 초에 1,000을 곱한 뒤 다시 변환해 보세요.
Unix timestamp는 초인가요, 밀리초인가요?
Unix timestamp는 흔히 초를 씁니다. 웹 API와 JavaScript Date는 밀리초를 쓰는 경우가 많습니다. 해당 시스템 문서를 확인하세요. 마이크로초나 나노초를 쓰는 시스템도 있습니다.
초를 밀리초로 어떻게 바꾸나요?
1,000을 곱합니다. 1720000000초는 1720000000000밀리초입니다. 반대로 가려면 1,000으로 나눕니다.
JavaScript Date는 왜 밀리초를 쓰나요?
JavaScript의 숫자 Date timestamp는 Unix epoch 이후 밀리초로 정의되어 있습니다. 그래서 unixSeconds가 Unix 초일 때 new Date(unixSeconds)는 잘못된 호출입니다.
10자리 timestamp는 항상 초인가요?
아닙니다. 요즘 날짜에서는 초인 경우가 많고, 13자리는 밀리초인 경우가 많습니다. 자리수는 힌트이지 규칙이 아닙니다. 문서나 말이 되는 날짜로 확인하세요.
Unix timestamp에 시간대가 들어 있나요?
없습니다. Unix timestamp는 1970-01-01 00:00:00 UTC부터 센 한 순간입니다. 시간대는 그 순간을 어떻게 보여줄지에 영향을 주고, 숫자 자체에는 들어 있지 않습니다.