·2분 읽기
유닉스 타임스탬프 5가지 함정 - 타임존·밀리초·1970 기원
유닉스 타임스탬프 다룰 때 자주 만나는 5가지 함정과 해결법. 타임존 누락·초 vs 밀리초 혼동·1970 이전 날짜·2038년 문제·일광절약시간까지 정리.

🕐
타임스탬프 변환기 바로 사용하기
Unix 타임스탬프와 날짜를 변환하세요
→
함정 1 — 타임존 누락
**문제**
타임스탬프는 UTC 기준 절대 시간이지만, 사람이 보는 시간은 본인 타임존 기준. 변환 시 타임존 명시 안 하면 9시간 차이 발생 (한국 KST = UTC+9).
**잘못된 예 (JavaScript)**
```js
new Date(1714180800).toString()
// "Wed Apr 27 2026 09:00:00 GMT+0900"
// 하지만 이건 2024-04-27 00:00:00 UTC를 의미!
```
**해결**
```js
new Date(1714180800 * 1000).toISOString()
// "2024-04-27T00:00:00.000Z"
```
**팁**
- 모든 타임스탬프는 UTC로 저장
- 표시할 때만 본인 타임존으로 변환
- DB 저장 시 UTC + ISO 8601 형식 권장
함정 2 — 초 vs 밀리초 혼동
**문제**
언어마다 단위 다름.
- Unix epoch (전통): 초(seconds) 단위
- JavaScript Date: 밀리초(ms) 단위
- Python time.time(): 초 단위 (소수점 ms)
- DB (PostgreSQL): 마이크로초
**1714180800 = ?**
- 초로 해석: 2024-04-27 00:00:00 UTC ✓
- 밀리초로 해석: 1970-01-20 04:09:40 UTC ✗
**잘못된 변환**
```js
new Date(1714180800) // 1970년!
```
**올바른 변환**
```js
new Date(1714180800 * 1000) // 2024년
new Date(1714180800000) // 2024년
```
**팁**
10자리 = 초, 13자리 = 밀리초로 자릿수로 빠른 식별.
함정 3 — 1970년 이전 날짜
**문제**
유닉스 타임스탬프는 1970-01-01 00:00:00 UTC 이후만 양수. 이전 날짜는 음수.
**예**
- 1969-12-31 00:00:00 UTC = -86400 초
- 1900-01-01 = -2208988800 초
**언어별 처리**
- JavaScript: 음수도 정상 처리
- Python time: 일부 OS에서 음수 에러
- DB: 컬럼 타입에 따라 음수 거부 가능
**해결**
역사적 날짜 다룰 때 ISO 8601 문자열 (`1900-01-01T00:00:00Z`) 사용. 타임스탬프는 1970년 이후 데이터에만.
함정 4·5 + Toolkio 활용
**함정 4 — 2038년 문제 (Y2K38)**
32비트 정수 타임스탬프 최대값 = 2^31 - 1 = 2147483647
= 2038-01-19 03:14:07 UTC
이후 정수 오버플로 → 1901년으로 회귀.
**해결**
- 64비트 정수 사용 (현대 시스템 표준)
- 32비트 임베디드·구형 DB는 별도 마이그레이션
- 새 프로젝트는 무조건 64비트
**함정 5 — 일광절약시간(DST)**
미국·유럽은 봄·가을에 시간 1시간 변경. 같은 로컬 시간이 두 번 발생하거나 사라짐.
**예**
- 미국 서머타임 종료: 새벽 2시 → 1시로 (1시간 반복)
- 같은 로컬 시간 "2026-11-02 01:30"이 두 번 존재
**해결**
- 모든 시간 UTC 저장
- DST 영향 받는 지역은 IANA 타임존 (`America/New_York`) 명시
- moment-timezone, luxon, date-fns-tz 라이브러리 활용
**Toolkio 타임스탬프 변환 도구**
- 초·밀리초 자동 감지
- 타임존 선택 가능
- 양방향 변환 (타임스탬프 ↔ 날짜)
- ISO 8601 / Unix / 사용자 정의 형식
5가지 함정 모두 자동 처리해서 사고 예방.