Unix 타임스탬프 FAQ
Unix 타임스탬프에 관한 가장 흔한 질문에 대한 빠른 답변 — 단위, 시간대 처리, 2038년 문제, 언어별 변환 등.
자주 묻는 질문
Unix 타임스탬프, epoch 시간, 시간대, 시간을 올바르게 저장하는 법에 대한 흔한 질문을 주제별로 정리했습니다. 답변은 빠른 참고용으로 사용하세요; 더 깊이 있는 가이드는 페이지 하단에 링크되어 있습니다.
다음으로 갈 곳
FAQ
- Unix 타임스탬프란?
- Unix 타임스탬프는 Unix epoch — 1970년 1월 1일 00:00:00 UTC — 이후 경과한 초의 수입니다. 언어 중립적이고 시간대 독립적인 정수로, 어떤 시점이든 고유하게 식별합니다.
- Unix epoch란?
- Unix epoch는 1970년 1월 1일 00:00:00 UTC입니다. 모든 Unix 타임스탬프는 이 고정 기준점에서 앞으로 — 음수 값의 경우 뒤로 — 측정됩니다. 1970년이 선택된 것은 실용적인 이유였습니다: 벨 연구소에서 Unix가 설계되던 당시 가까운 과거의 깔끔한 연도였습니다.
- 10자리와 13자리 타임스탬프의 차이는?
- 10자리 타임스탬프(예: 1700000000)는 epoch 이후의 초를 나타냅니다. 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 epoch 이전의 순간을 나타냅니다. 예를 들어 -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초 정밀도입니다. 1초 미만 정밀도에는 밀리초 타임스탬프(13자리)가 웹 API와 JavaScript에서 흔합니다. 일부 시스템은 마이크로초(16자리)나 나노초를 씁니다. 적절한 단위는 애플리케이션이 실제로 필요로 하는 정밀도에 따라 달라집니다.
- Unix 타임스탬프는 얼마나 커질 수 있나?
- 64비트 부호 있는 정수(오늘날의 표준)에서 Unix 타임스탬프는 약 2920억 년 전부터 2920억 년 후까지의 어떤 순간이든 표현할 수 있습니다. 유명한 32비트 한계(2038년 문제)는 레거시 시스템에만 적용됩니다.
- 왜 내 타임스탬프가 1970년으로 표시되나?
- 보통 세 가지 이유 중 하나입니다: 값이 0(epoch 자체), 값이 밀리초인데 초로 취급됨(그래서 0 근처의 아주 작은 초 값으로 반올림됨), 또는 값이 null/undefined이고 코드가 기본값 0으로 처리함.
- UTC와 GMT의 차이는?
- 대부분의 목적에서 UTC와 GMT는 호환됩니다. UTC(협정 세계시)는 현대 원자 표준이고, GMT(그리니치 평균시)는 오프셋이 0인 시간대를 가리키는 레거시 용어입니다. 영국과 대부분의 소프트웨어는 이를 동등하게 취급합니다.
- 날짜를 Unix 타임스탬프로 저장해야 하나, ISO 8601 문자열로 저장해야 하나?
- 둘 다 됩니다. Unix 정수는 간결하고 비교가 쉽습니다; ISO 8601 문자열은 자기 설명적이고 사람이 읽을 수 있습니다. 데이터베이스에서는 네이티브 datetime 타입(Postgres의 TIMESTAMP WITH TIME ZONE, MySQL의 DATETIME(6))이 보통 가장 좋습니다. 시간대 의미를 보존하고 효율적으로 인덱싱하기 때문입니다.
- 내 서버의 로컬 시간을 저장해도 안전한가?
- 아니요. 오프셋 없이 로컬 시간을 저장하면 서버가 이동하거나, DST가 바뀌거나, 다른 시간대의 다른 서버가 값을 읽을 때마다 정보가 손실됩니다. UTC(Unix 타임스탬프 또는 시간대 인식 datetime)로 저장하고, 로컬 시간으로의 변환은 표시 계층에서만 하세요.
- Unix 타임스탬프는 윤초를 포함하나?
- POSIX Unix 시간은 의도적으로 윤초를 무시합니다 — 추가 UTC 초가 삽입되어도 모든 Unix 날은 정확히 86,400초입니다. 실제 초 번호가 반복되거나, 시스템에 따라 시계가 평활화됩니다.