🗓️ 유닉스 타임스탬프 변환하는 방법

1970년 기준 초 단위 시간을 날짜로 바꾸는 법

서버 로그나 API 응답에서 1735689600 같은 숫자가 날짜 대신 찍혀 있는 걸 본 적 있을 겁니다. 이 글에서는 유닉스 타임스탬프가 무엇이고 왜 쓰이는지, 초 단위와 밀리초 단위를 헷갈리면 왜 버그가 나는지, 그리고 실제로 어떻게 날짜로 변환하는지 정리합니다.

유닉스 타임스탬프란

유닉스 타임스탬프(Unix timestamp, 또는 Unix time·POSIX time)는 1970년 1월 1일 00:00:00 UTC(협정세계시)를 기준(유닉스 에폭, Unix epoch)으로 그 이후 경과한 초의 수를 하나의 정수로 나타낸 값입니다. 예를 들어 1735689600은 에폭으로부터 정확히 1,735,689,600초가 지난 시점을 뜻합니다. 날짜를 '연-월-일 시:분:초' 같은 문자열이 아니라 단일 숫자로 표현하기 때문에 저장·비교·정렬이 매우 쉽습니다. 두 이벤트 중 어느 게 먼저 일어났는지는 두 정수를 비교하기만 하면 되고, 특정 기간에 속하는 데이터를 찾을 때도 부등식 하나로 끝납니다. 무엇보다 유닉스 타임스탬프는 UTC를 기준으로 하는 절대적인 시점이라 타임존 정보를 함께 저장할 필요가 없습니다. 서버가 서울에 있든 뉴욕에 있든 같은 순간은 같은 숫자로 표현되고, 화면에 보여줄 때만 사용자의 로컬 타임존으로 변환하면 됩니다. 이런 이유로 데이터베이스, 로그 파일, API 응답 등 대부분의 시스템 내부에서 시간을 다룰 때 표준처럼 쓰입니다.

초 단위와 밀리초 단위, 헷갈리는 이유

실무에서 가장 흔한 실수 중 하나가 초 단위와 밀리초 단위를 혼동하는 것입니다. 유닉스 타임스탬프의 원래 정의는 '초' 단위이고, 리눅스의 date +%s, PHP의 time(), 대부분의 Unix 계열 API가 초 단위 정수를 반환합니다. 반면 자바스크립트의 Date.now()new Date().getTime()은 밀리초 단위를 반환합니다. 두 값은 자릿수로 어렵지 않게 구분할 수 있습니다. 지금(2020년대 중후반) 기준 초 단위 타임스탬프는 10자리(예: 1783929600), 밀리초 단위는 13자리(예: 1783929600000)입니다. 이 차이를 모르고 초 단위 값을 자바스크립트의 new Date()에 그대로 넣으면 1970년 1월 근처의 엉뚱한 날짜가 나오고, 반대로 밀리초 값을 초 단위로 착각해 1000을 곱하면 서기 몇만 년대의 날짜가 나오는 식의 버그가 발생합니다. API를 연동하거나 로그를 분석할 때는 항상 자릿수를 먼저 확인하는 습관이 필요합니다.

실제 변환 예시

예를 들어 초 단위 타임스탬프 1735689600을 변환해 보면 2025년 1월 1일 00:00:00 UTC가 됩니다. 이 값을 밀리초로 쓰려면 1000을 곱한 1735689600000을 사용하면 됩니다. 반대로 특정 날짜를 타임스탬프로 바꿀 때도 마찬가지로 UTC 기준인지 로컬 타임존 기준인지를 먼저 확인해야 정확한 값을 얻을 수 있습니다. 값을 하나씩 계산기로 두드리는 대신, 입력한 숫자의 자릿수를 보고 초·밀리초를 자동으로 판별해 날짜로 바꿔주고, 반대로 날짜를 선택하면 타임스탬프로 즉시 변환해 주는 도구를 쓰면 훨씬 빠릅니다.

언어별 유닉스 타임스탬프 다루기

주요 언어·환경에서 현재 유닉스 시각(초)을 얻고, 타임스탬프를 날짜로 변환하는 대표 표현입니다.

언어 / 환경현재 시각(초)타임스탬프 → 날짜
JavaScriptMath.floor(Date.now()/1000)new Date(ts*1000)
Pythonint(time.time())datetime.fromtimestamp(ts)
PHPtime()date('Y-m-d H:i:s', $ts)
JavaInstant.now().getEpochSecond()Instant.ofEpochSecond(ts)
MySQLUNIX_TIMESTAMP()FROM_UNIXTIME(ts)
Bashdate +%sdate -d @ts

기억해둘 만한 타임스탬프

타임스탬프UTC 시각의미
01970-01-01 00:00:00유닉스 epoch 시작점
1,000,000,0002001-09-09 01:46:4010억 초 돌파
2,000,000,0002033-05-18 03:33:2020억 초
2,147,483,6472038-01-19 03:14:0732비트 부호 정수 한계 (Y2038 문제)
4,294,967,2952106-02-07 06:28:1532비트 부호 없는 정수 한계

위 UTC 시각은 초 단위 타임스탬프 기준입니다. 밀리초(13자리)를 쓰는 환경(JavaScript Date.now() 등)에서는 1000을 곱하거나 나눠 변환하세요.

🗓️ 이 작업, 도구로 바로 해보세요

유닉스 타임스탬프 변환하는 방법 — 1970년 기준 초 단위 시간을 날짜로 바꾸는 법

다른 가이드

🔁
도메인 IP 주소 확인하는 방법
도메인이 가리키는 실제 서버 IP를 찾는 법
🛰️
DNS 전파 확인하는 방법 (TTL이란?)
네임서버 변경 후 전파 여부와 TTL 개념 정리
📡
내 IP 주소 확인하는 가장 쉬운 방법
공인 IP·사설 IP 차이와 확인 방법
📐
CIDR 표기법과 서브넷 마스크 계산법
/24 같은 CIDR 표기를 서브넷 마스크로 바꾸는 법
🩺
SSL 인증서 만료일 확인하는 방법
브라우저 없이 인증서 만료일을 확인하는 법
🪪
JWT 토큰 구조 이해하고 디코딩하는 방법
Header·Payload·Signature 3부분 구조 설명
🗝️
Apache Basic 인증(.htpasswd) 파일 만드는 법
APR1-MD5 해시로 .htpasswd 생성하는 법
🔑
안전한 비밀번호 만드는 기준과 생성 방법
길이·문자 조합·엔트로피로 보는 비밀번호 강도
🔐
Base64 인코딩이란? 언제 어떻게 쓰나
이메일 첨부·데이터 URI에 쓰이는 이유
📘
JSON Formatter로 API 응답 가독성 높이기
압축된 JSON을 보기 좋게 정리하는 법
🗃️
지저분한 SQL 쿼리 포맷팅하는 방법
한 줄 SQL을 절 단위로 정렬하는 법
🎨
HEX RGB HSL 색상 코드 변환하는 방법
세 가지 색상 표기법의 차이와 변환법
🔠
카멜케이스 스네이크케이스 등 표기법 정리
camelCase·snake_case·PascalCase 언제 쓰나
🆚
두 텍스트 파일 차이 비교하는 방법
코드·문서 버전 간 차이를 빠르게 찾는 법