Unix 타임스탬프 FAQ
Unix 타임스탬프에 관한 가장 흔한 질문에 대한 빠른 답변 — 단위, 시간대 처리, 2038년 문제, 언어별 변환 등.
자주 묻는 질문
- Unix 타임스탬프란?
- Unix 타임스탬프는 Unix 에포크(1970년 1월 1일 00:00:00 UTC) 이후 경과한 초 수입니다. 언어 중립적이고 시간대에 독립적인 정수로, 시간상의 어떤 순간이든 고유하게 식별합니다.
- Unix 에포크란?
- Unix 에포크는 1970년 1월 1일 00:00:00 UTC입니다. 모든 Unix 타임스탬프는 이 고정 기준점에서 앞으로 — 음수 값의 경우 뒤로 — 측정됩니다. 1970년이 선택된 것은 실용적 이유였습니다: 벨 연구소에서 Unix를 설계하던 당시의 최근이고 깔끔한 연도였습니다.
- 10자리와 13자리 타임스탬프의 차이는?
- 10자리 타임스탬프(예: 1700000000)는 에포크 이후의 초를 나타냅니다. 13자리(예: 1700000000000)는 밀리초를 나타냅니다. JavaScript의 Date.now()는 밀리초를 반환하고, 대부분의 Unix 시스템 호출과 Python, Go, PHP 같은 언어는 기본적으로 초를 반환합니다.
- 왜 JavaScript는 초 대신 밀리초를 쓰나요?
- JavaScript의 Date API는 1995년에 사용 가능했던 시스템 타이머의 해상도에 맞춰 설계되었습니다. 밀리초를 쓰면 1초 미만 지속 시간의 정밀도 손실을 피합니다. 서버가 생성한 초 단위 Unix 타임스탬프를 다룰 때는 new Date()에 넘기기 전에 1000을 곱하세요.
- JavaScript에서 Unix 타임스탬프를 읽기 쉬운 날짜로 변환하려면?
- 초 타임스탬프: new Date(1700000000 * 1000).toISOString(). 밀리초 타임스탬프: new Date(1700000000000).toISOString(). 둘 다 '2023-11-15T06:13:20.000Z' 같은 ISO 8601 문자열을 만듭니다. 지역화된 표시에는 timeZone 옵션과 함께 toLocaleString()을 쓰세요.
- Unix 타임스탬프는 시간대를 인식하나요?
- 아니요. Unix 타임스탬프는 항상 UTC의 단일 순간을 나타냅니다. 시간대 정보는 타임스탬프를 표시용으로 포맷할 때만 적용됩니다. 서로 다른 시간대의 두 기기는 같은 순간에 대해 같은 Unix 타임스탬프를 만듭니다.
- 2038년 문제란?
- Unix 타임스탬프를 32비트 부호 있는 정수로 저장하는 시스템은 2,147,483,647까지의 값만 나타낼 수 있는데, 이는 2038년 1월 19일 03:14:07 UTC에 해당합니다. 그 순간 이후 정수는 큰 음수로 오버플로됩니다. 현대 64비트 시스템은 영향을 받지 않지만, 임베디드 시스템과 레거시 데이터베이스는 여전히 위험할 수 있습니다.
- 음수 Unix 타임스탬프란?
- 음수 Unix 타임스탬프는 Unix 에포크 이전의 순간을 나타냅니다. 예를 들어 -86400은 1969년 12월 31일 00:00:00 UTC입니다. 대부분의 현대 날짜 API는 음수 타임스탬프를 올바르게 처리하지만, 일부 오래된 시스템과 데이터베이스는 지원하지 않습니다.
- Python에서 Unix 타임스탬프를 어떻게 얻나요?
- 초에는 import time; int(time.time())을 쓰세요. 명시적 UTC datetime에는: import datetime; int(datetime.datetime.now(datetime.timezone.utc).timestamp()). 밀리초에는: int(time.time() * 1000).
- Unix 타임스탬프는 얼마나 정밀한가요?
- 표준 Unix 타임스탬프는 초 정밀도입니다. 1초 미만 정밀도에는 밀리초 타임스탬프(13자리)가 웹 API와 JavaScript에서 흔합니다. 일부 시스템은 마이크로초(16자리)나 나노초를 씁니다. 적절한 단위는 애플리케이션이 실제로 필요로 하는 정밀도에 따라 다릅니다.