유닉스 타임스탬프란?
유닉스 타임스탬프(Unix time, epoch time)는 1970년 1월 1일 0시 0분 0초(UTC)부터 지난 시간을 초 단위로 센 숫자입니다. 시간대와 상관없이 전 세계 어디서나 같은 값이라서 서버, 데이터베이스, 로그, API에서 시각을 저장할 때 널리 씁니다.
한국 시간(KST)은 UTC보다 9시간 빠르므로, 같은 타임스탬프를 한국 시간으로 표시하면 UTC 시각에 9시간을 더한 값이 됩니다. 한국은 서머타임이 없어 1년 내내 UTC+9입니다.
초인지 밀리초인지 구분하는 법
- 10자리 (예: 1798000000) → 초. 대부분의 서버와 데이터베이스가 씁니다.
- 13자리 (예: 1798000000000) → 밀리초. JavaScript의
Date.now(), Java의System.currentTimeMillis()가 이 값을 줍니다. - 16자리는 마이크로초, 19자리는 나노초입니다. 단위를 ‘자동’으로 두면 자릿수를 보고 판단합니다.
언어별 현재 타임스탬프 구하기
// JavaScript Math.floor(Date.now() / 1000) # Python import time; int(time.time()) // Java System.currentTimeMillis() / 1000 // Go time.Now().Unix() -- MySQL SELECT UNIX_TIMESTAMP(); -- PostgreSQL SELECT EXTRACT(EPOCH FROM now())::bigint; # 셸 (macOS, Linux) date +%s
자주 묻는 질문
2038년 문제가 뭔가요?
타임스탬프를 부호 있는 32비트 정수로 저장하는 오래된 시스템은 2038년 1월 19일 03:14:07(UTC), 값 2,147,483,647을 넘으면 음수로 넘어가 1901년으로 잘못 계산됩니다. 요즘 시스템은 대부분 64비트 정수를 써서 이 문제가 없습니다.
음수 타임스탬프도 되나요?
네. 1970년 이전 시각은 음수로 표현합니다. 예를 들어 -86400은 1969년 12월 31일 0시(UTC)입니다.
윤초는 반영되나요?
유닉스 시간은 윤초를 세지 않고 하루를 항상 86,400초로 칩니다. 그래서 대부분의 프로그램과 같은 결과가 나옵니다.