본문 바로가기

로딩 중...


Unix 타임스탬프 변환기

DB에서 created_at 컬럼을 열었더니 1719800000 같은 숫자만 잔뜩 찍혀 있어서, 이게 대체 언제인지 매번 따로 확인해 본 적 있으실 겁니다. 시간을 사람이 읽는 날짜 대신 epoch 정수로 저장하면 정렬도 빠르고 타임존 논쟁도 피할 수 있어서 자주 쓰는데, 정작 눈으로는 아무 의미가 없죠. Unix 타임스탬프 변환기는 이 숫자를 붙여넣으면 곧바로 사람이 읽는 날짜로 풀어 주고, 반대로 날짜를 골라 타임스탬프로 되돌려 주는 도구입니다.

로그와 DB를 오가며 1719800000을 계산기에 넣거나 온라인 변환기를 다시 여는 왕복이 지겨워서, 붙여넣으면 바로 보이게 만들어 제가 쓰고 있습니다.

사용 방법

타임스탬프를 날짜로

  1. 타임스탬프 → 날짜 탭에서 입력창에 숫자를 붙여넣습니다. 초 단위인지 밀리초 단위인지 고를 필요 없이, 자릿수를 보고 자동으로 판별해 "초(seconds) 단위 타임스탬프로 인식"처럼 어떻게 읽었는지 알려 줍니다.

    Unix 타임스탬프 변환기-guide-1

  2. 입력 즉시 아래 결과 카드에 한국어 날짜, ISO 8601, UTC, 그리고 초·밀리초 값이 함께 나옵니다. 각 줄을 클릭하면 그 값이 복사되고, 상단 배지로 "3개월 전" 같은 상대 시간도 보여 줍니다.

    Unix 타임스탬프 변환기-guide-2

  3. 반대로 필요할 땐 날짜 → 타임스탬프 탭에서 날짜와 시간을 고르면 초·밀리초 타임스탬프가 계산됩니다. 현재 시간, 오늘 자정 버튼으로 자주 쓰는 값을 한 번에 채울 수 있습니다.

    Unix 타임스탬프 변환기-guide-3

맨 위 카드에는 지금 이 순간의 초·밀리초 타임스탬프가 실시간으로 흐르고 있어서, 테스트 데이터에 넣을 "현재 시각" 값이 필요하면 그대로 클릭해 복사하면 됩니다.

정확하진 않아도 감으로 대충 환산하기

Unix 타임스탬프는 1970-01-01 00:00:00 UTC를 0으로 두고, 그 뒤로 흐른 초를 그냥 계속 더한 숫자입니다. 그래서 값이 클수록 최근 시각이고, 원리만 알면 변환기를 안 켜도 대강의 시대는 감으로 잡힙니다.

가장 먼저 볼 건 자릿수입니다. 10자리면 초 단위, 13자리면 밀리초 단위라고 보면 거의 맞습니다. 밀리초는 초에 1000을 곱한 값이라 자릿수가 세 칸 더 붙기 때문입니다. 이 변환기도 같은 기준으로, 대략 100억(9999999999) 이하 숫자는 초, 그보다 크면 밀리초로 읽습니다.

앞자리로 연대도 어림잡을 수 있습니다. 10자리 초 값이 17로 시작하면 대략 2020년대, 16으로 시작하면 2020년 안팎, 15로 시작하면 2017~2018년 무렵입니다. 로그에서 17xxxxxxxx를 봤다면 "아, 요즘 데이터구나" 정도는 바로 판단이 서죠. 물론 정확한 날짜와 시각은 변환기로 확인해야 합니다. 이 어림은 어느 로그를 먼저 열어 볼지 고를 때 쓰는 용도입니다.

초와 밀리초를 헷갈리면 생기는 일

같은 시각이라도 초로 저장하느냐 밀리초로 저장하느냐에 따라 값이 정확히 1000배 차이 납니다. 이 단위를 착각하면 시간이 엉뚱한 곳으로 튀는데, 방향이 둘 다 고약합니다.

밀리초 값 1719800000000을 초로 착각해 그대로 해석하면, 1000배 먼 미래로 날아가 수만 년 뒤가 됩니다. 반대로 초 값 1719800000을 밀리초로 읽으면 0에 훨씬 가까워져서 1970년 언저리, 즉 epoch 시작점 근처로 주저앉습니다. "가입일이 1970년으로 찍힌다"거나 "만료일이 말도 안 되는 미래다" 같은 버그는 대부분 이 단위 착각이 원인입니다.

JavaScript를 쓴다면 함정이 하나 더 있습니다. Date 객체는 밀리초를 기준으로 동작해서 new Date(1719800000)에 초 값을 넣으면 조용히 1970년으로 해석해 버립니다. 서버에서 온 초 단위 값을 그대로 넘긴 게 원인이라, 에러도 안 나고 값만 틀리죠. 이 도구는 자릿수로 단위를 먼저 판별한 뒤 어느 쪽으로 읽었는지 화면에 표시하기 때문에, 붙여넣는 순간 "이건 밀리초로 읽혔네"를 눈으로 확인하고 넘어갈 수 있습니다.

자주 묻는 질문

타임스탬프가 10자리인 것과 13자리인 것의 차이는 뭔가요?

10자리는 초(seconds) 단위, 13자리는 밀리초(milliseconds) 단위 타임스탬프입니다. Unix 전통적으로 초 단위를 사용하지만, JavaScript의 Date.now()나 Java의 System.currentTimeMillis()는 밀리초를 반환합니다. 이 도구는 자릿수를 자동 감지하여 올바르게 변환합니다.

UTC와 로컬 시간이 다르게 표시되는데 어떤 걸 써야 하나요?

유닉스 타임스탬프 자체는 시간대에 독립적인 절대 시점이며, UTC 기준으로 정의됩니다. 사용자에게 표시할 때는 로컬 시간간을, 서버 간 통신이나 데이터 저장에는 UTC 타임스탬프를 사용하는 것이 일반적입니다.

Y2K38 문제가 뭔가요?

32비트 부호 있는 정수로 표현 가능한 최대 유닉스 타임스탬프는 2,147,483,647(2038년 1월 19일)입니다. 이 시점 이후에는 정수 오버플로가 발생합니다. 현대 64비트 시스템에서는 해당되지 않지만, 일부 레거시 임베디드 시스템에서는 주의가 필요합니다.

JWT 토큰의 만료 시간도 이 도구로 확인할 수 있나요?

네, JWT 페이로드의 exp(만료), iat(발급), nbf(활성 시작) 필드는 모두 초 단위 유닉스 타임스탬프입니다. 해당 숫자를 이 도구에 입력하면 실제 날짜와 시간을 즉시 확인할 수 있습니다.