유틸리티

Unix 타임스탬프란? 날짜 변환 방법과 실무 활용

서버 로그에 1709251200이라는 숫자가 찍혀 있다. 날짜 같기도 하고 아닌 것 같기도 한데, 이건 2024년 3월 1일 00:00:00(UTC)을 의미하는 Unix 타임스탬프다. 1970년 1월 1일 자정부터 경과한 초(秒)를 숫자 하나로 표현한 것이다.

Unix 타임스탬프의 원리

컴퓨터가 시간을 다루는 가장 기본적인 방식이다. 기준점(Epoch)인 1970년 1월 1일 00:00:00 UTC부터 지금까지 흘러간 초를 정수로 표현한다.

타임스탬프날짜 (UTC)의미
01970-01-01 00:00:00Unix Epoch 기준점
9466848002000-01-01 00:00:00밀레니엄
17092512002024-03-01 00:00:00예시 날짜
21474836472038-01-19 03:14:0732비트 한계 (Y2K38 문제)

초(seconds)와 밀리초(milliseconds)

타임스탬프 숫자의 자릿수를 보면 단위를 구분할 수 있다.

  • 10자리 (예: 1709251200): 초 단위. Unix/Linux 시스템, PHP, Python에서 기본으로 쓴다.
  • 13자리 (예: 1709251200000): 밀리초 단위. JavaScript(Date.now()), Java(System.currentTimeMillis())에서 쓴다.
TIP 13자리 타임스탬프를 10자리 시스템에 넣으면 서기 56,000년쯤 날짜가 나온다. 단위를 잘못 넣은 것이니 끝 3자리를 잘라내면 된다.

타임스탬프를 날짜로 바꾸는 법

타임스탬프 변환기에 숫자를 넣으면 로컬 시간, UTC, ISO 8601 세 가지 형식으로 날짜가 표시된다. 반대로 날짜를 입력해서 타임스탬프 숫자를 얻을 수도 있다. 현재 시각의 타임스탬프가 실시간으로 표시되니 API 테스트 시 바로 복사해서 쓸 수 있다.

개발 실무에서 타임스탬프를 쓰는 이유

시간대(timezone) 독립적
"2026-03-01 09:00"은 한국 시간인지 미국 시간인지 알 수 없다. 타임스탬프는 UTC 기준 절대값이라 시간대 혼동이 없다.
비교와 정렬이 쉬움
문자열 날짜를 비교하려면 파싱이 필요하다. 타임스탬프는 숫자 비교 한 번으로 선후가 결정된다.
저장 공간 효율
"2026-03-01T09:00:00+09:00" (25바이트) vs 1709251200 (10바이트). 대량 데이터에서 차이가 커진다.

주의할 점

  • Y2K38 문제: 32비트 정수로 표현 가능한 최대 타임스탬프는 2038년 1월 19일이다. 이후로는 오버플로가 발생한다. 64비트 시스템에서는 문제없다.
  • 음수 타임스탬프: 1970년 이전 날짜는 음수로 표현된다. 1969-12-31은 -86400이다.
  • 윤초: Unix 타임스탬프는 윤초를 무시한다. 정밀한 시간 측정이 필요한 시스템에서는 별도 처리가 필요하다.

로그 분석이든 API 디버깅이든, 타임스탬프를 읽을 줄 알면 시간 관련 버그를 잡는 속도가 확실히 빨라진다.