Unix 타임스탬프 형식 설명
모든 Unix 타임스탬프 형식의 완전한 참조 — 초, 밀리초, 마이크로초, ISO 8601, RFC 2822 — 와 각 언어와 데이터베이스가 어떤 형식을 쓰는지 보여주는 예제.
초 단위 Unix 시간 — 보편적인 형식
가장 흔한 형식: 1970년 1월 1일 00:00:00 UTC 이후의 정수 초를 세는 32비트 또는 64비트 정수. 현재 약 17억인 10자리 숫자입니다.
- 예: 1700000000 = 2023-11-15 06:13:20 UTC
- 사용처: Python time.time(), PHP time(), Go time.Now().Unix(), Ruby Time.now.to_i, C time(NULL)
- 저장 형식: 32비트 int(레거시, 최대 2038년), 64비트 int(현대, 수십억 년 안전)
- 데이터베이스: MySQL UNIX_TIMESTAMP(), PostgreSQL EXTRACT(EPOCH FROM NOW())::BIGINT
밀리초 단위 Unix 시간 — JavaScript의 형식
Unix 에포크 이후의 밀리초: 밀리초 정밀도를 가진 13자리 정수. JavaScript의 Date 객체가 내부적으로 쓰는 형식입니다.
- 예: 1700000000000 = 2023-11-15 06:13:20.000 UTC
- 사용처: JavaScript Date.now(), Java System.currentTimeMillis(), .NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
- 초로 변환: Math.floor(ms / 1000)
- 초에서 변환: seconds * 1000
ISO 8601 — 사람이 읽는 표준
ISO 8601은 날짜와 시간을 문자열로 표현하는 국제 표준입니다. Unix 타임스탬프와 달리 자기 기술적이어서, 형식 안에 날짜/시간과 시간대 오프셋을 담습니다.
- 2023-11-15T06:13:20Z — UTC(끝의 Z는 UTC를 의미)
- 2023-11-15T01:13:20-05:00 — 명시적 UTC 오프셋 포함(EST)
- 2023-11-15T06:13:20.000Z — 밀리초 포함
- JavaScript: date.toISOString()은 항상 끝에 Z가 붙은 UTC를 반환
- Python: datetime.isoformat(), Go: time.Format(time.RFC3339)
RFC 2822 — 이메일과 HTTP 날짜 형식
RFC 2822(HTTP에서는 RFC 1123이라고도 함)는 이메일 헤더와 HTTP 응답에 쓰이는 날짜 형식입니다. JavaScript의 Date.toUTCString()이 이 형식을 반환합니다.
- 예: Wed, 15 Nov 2023 06:13:20 GMT
- 사용처: HTTP 응답 헤더(Last-Modified, Date, Expires), 이메일 헤더(Date:)
- JavaScript: date.toUTCString()
- 현대 API에서는 드물지만 웹 인프라에서는 여전히 널리 보입니다
타임스탬프 형식을 식별하는 법
알 수 없는 타임스탬프 값을 받으면 다음 규칙으로 형식을 식별하세요:
- 10자리, 1로 시작 → Unix 초(예: 1700000000)
- 13자리, 1로 시작 → Unix 밀리초(예: 1700000000000)
- 음수 → 1970년 이전의 Unix 초 또는 밀리초
- T 또는 Z 포함 → ISO 8601(예: 2023-11-15T06:13:20Z)
- 쉼표나 요일 이름 포함 → RFC 2822(예: Wed, 15 Nov 2023 ...)
- 16자리 → 마이크로초(초로 만들려면 1,000,000으로 나눔)
- 19자리 → 나노초(초로 만들려면 1,000,000,000으로 나눔)
마이크로초와 나노초
일부 고정밀 시스템은 밀리초보다 작은 단위를 씁니다. 애플리케이션 코드에서는 드물지만 저수준 시스템, 데이터베이스 내부, 관측성 도구에서 나타납니다.
- 마이크로초(µs): 16자리 정수 — Rust SystemTime as_micros(), PostgreSQL clock_gettime()
- 나노초(ns): 19자리 정수 — Go time.Now().UnixNano(), Rust SystemTime as_nanos()
- PostgreSQL EXTRACT(EPOCH)은 소수부에 마이크로초를 담은 부동소수점 수를 반환
- 나노초를 초로 변환: 1,000,000,000(1e9)으로 나눔
Unix 타임스탬프 형식 FAQ
- Unix 타임스탬프는 몇 자리인가요?
- 현대 Unix 타임스탬프는 초로 10자리(약 17억), 밀리초로 13자리입니다. 마이크로초는 16자리, 나노초는 19자리입니다.
- Unix 시간과 ISO 8601의 차이는?
- Unix 시간은 1970년 UTC 이후의 초 또는 밀리초인 단일 숫자로 시간대를 담지 않습니다. ISO 8601은 2023-11-15T06:13:20Z 같은 자기 기술적 문자열로 날짜, 시간, 오프셋을 담습니다.
- 초인지 밀리초인지 어떻게 식별하나요?
- 자릿수를 세세요: 10자리는 초, 13자리는 밀리초입니다. 값이 1970년 근처나 먼 미래 날짜로 변환되면 단위를 잘못 읽은 것입니다.