Unix 타임스탬프의 뜻

Unix 타임스탬프는 특정한 한 순간을 기준점에서 얼마나 떨어져 있는지 숫자로 나타낸 값입니다. 기준점은 1970년 1월 1일 00:00:00 UTC이며, 흔히 Unix epoch 또는 에포크라고 부릅니다.

초 단위를 쓴다면 기준점이 0, 1초 뒤가 1, 하루 뒤가 86400입니다. 달력의 연·월·일 이름 대신 하나의 연속된 숫자로 시간을 표현하므로 서로 다른 지역에서도 같은 순간을 비교하고 순서대로 정렬하기 쉽습니다.

가장 중요한 한 문장Unix 값은 지역의 벽시계가 아니라 UTC 기준의 한 순간을 나타냅니다. 한국 날짜로 볼 때는 그 순간을 KST로 표시하는 과정이 추가됩니다.
Unix 초UTC한국 표준시 KST
-11969-12-31 23:59:591970-01-01 08:59:59
01970-01-01 00:00:001970-01-01 09:00:00
11970-01-01 00:00:011970-01-01 09:00:01
864001970-01-02 00:00:001970-01-02 09:00:00
17040672002024-01-01 00:00:002024-01-01 09:00:00

왜 1970년 1월 1일이 기준인가

이 날짜는 자연과학적으로 시간이 시작된 날이 아니라 Unix 계열 시간 표현에서 정한 기준점입니다. 기준점 하나를 정하면 그 이전은 음수, 이후는 양수로 표현할 수 있습니다.

여기서 1970년은 값의 출발점일 뿐 표현 가능한 날짜의 절대 한계가 아닙니다. 사용하는 숫자 범위와 날짜 표시 범위가 충분하다면 1970년 이전과 먼 미래도 나타낼 수 있습니다. -31536000초처럼 음수를 사용하면 대략 1년 전으로 이동합니다.

에포크와 타임스탬프의 차이

에포크는 출발점이고, 타임스탬프는 그 출발점에서 잰 값입니다. “Unix epoch가 1970-01-01 UTC”라는 말과 “이 사건의 Unix 타임스탬프가 1704067200”이라는 말은 서로 다른 대상을 설명합니다.

초, 밀리초, 마이크로초, 나노초

Unix 시간이라고 해서 언제나 초만 쓰는 것은 아닙니다. 더 짧은 간격이 필요하면 밀리초, 마이크로초, 나노초를 씁니다. 단위를 적지 않으면 같은 숫자도 완전히 다른 날짜가 될 수 있습니다.

단위기호1초2024-01-01 00:00:00 UTC 예시
초s11704067200
밀리초ms1,0001704067200000
마이크로초μs1,000,0001704067200000000
나노초ns1,000,000,0001704067200000000000

숫자 길이는 단서일 뿐

현재와 가까운 양수 값은 초 10자리, 밀리초 13자리, 마이크로초 16자리, 나노초 19자리인 경우가 많습니다. 하지만 오래된 날짜, 먼 미래, 앞에 0이 붙은 값, 음수와 소수는 이 규칙에서 벗어날 수 있습니다. 원본에 표시된 단위를 우선하고 변환된 날짜가 예상 범위인지 대조하세요.

1,000배 착오를 먼저 의심하세요. 결과가 1970년 근처로 나오거나 기대보다 지나치게 먼 미래라면 초와 밀리초를 바꿔 다시 확인해 보세요.

Unix 값에는 시간대가 없다

Unix 값은 UTC 기준의 순간을 나타내지만 그 숫자 안에 한국이나 미국 뉴욕 같은 지역 이름이 저장된 것은 아닙니다. 같은 값 1704067200을 UTC로 표시하면 2024년 1월 1일 0시, 한국에서는 같은 날 오전 9시입니다.

따라서 “타임스탬프를 KST로 바꾼다”는 것은 숫자 자체를 다른 순간으로 옮기는 것이 아니라 같은 순간을 한국 시계로 보여주는 일입니다. UTC와 KST를 오갈 때 원래 Unix 값은 변하지 않습니다.

고정 시차와 지역 시간대

현재 한국 표준시는 연중 UTC+09:00이라 9시간 차이를 적용할 수 있습니다. 반면 계절에 따라 시차가 바뀌는 지역은 단순히 몇 시간을 더하는 방식만으로 과거와 미래를 모두 정확하게 다루기 어렵습니다. 해당 날짜에 적용된 지역 규칙을 확인해야 합니다.

일정 공유 요령“오전 9시”만 적지 말고 2024-01-01T09:00:00+09:00처럼 날짜와 오프셋을 함께 남기면 보는 사람의 지역이 달라도 같은 순간으로 해석할 수 있습니다.

소수 초와 정밀도

초보다 짧은 순간은 소수로 표현할 수 있습니다. 1704067200.5초는 2024년 1월 1일 00:00:00 UTC에서 500밀리초 뒤입니다. 같은 값은 1704067200500밀리초로도 쓸 수 있습니다.

단위를 바꿀 때는 원본이 가진 정밀도보다 더 정확해지는 것은 아닙니다. 초 단위 정수에 1,000을 곱해 밀리초 숫자로 만들 수 있지만 새로 생긴 세 자리 0은 실제 측정이 밀리초까지 정확했다는 뜻이 아닙니다. 숫자의 단위와 함께 원본 측정 정밀도도 구분해 두는 것이 좋습니다.

나노초를 날짜로 볼 때

나노초 값은 매우 길어 일반 숫자 표기에서 끝자리가 뭉개질 수 있습니다. 정확한 비교가 필요하면 원본 숫자를 정수 그대로 유지하고, 사람이 읽는 날짜에는 소수 아래 몇 자리가 보존되었는지 확인하세요.

음수 시간과 윤초

음수는 1970년 이전

-1초는 에포크 1초 전인 1969-12-31 23:59:59 UTC입니다. 한국 시간으로는 이미 1970-01-01 08:59:59이므로 Unix 값의 부호만 보고 지역 달력의 연도를 단정하면 안 됩니다.

윤초는 별도로 세지 않음

일반적인 POSIX 방식의 Unix 시간은 윤초를 독립된 한 초로 세지 않습니다. 그래서 UTC 시계에서 드물게 나타나는 23:59:60을 보통의 Unix 값 하나로 단순 대응시키지 않습니다. 두 Unix 값을 뺀 결과를 아주 긴 천문학적 경과 시간으로 해석할 때는 이 차이를 알아둘 필요가 있습니다.

윤초를 세지 않는 Unix 시간 정의는 The Open Group의 POSIX 시간 설명에서 확인할 수 있습니다.

2038년 문제는 무엇인가

Unix 초를 32비트 부호 정수로 보관하면 가장 큰 값은 2147483647입니다. 이 값은 2038-01-19 03:14:07 UTC이고, 1초를 더한 값을 같은 형식에 담을 수 없습니다. 이를 흔히 2038년 문제라고 합니다.

이 문제는 Unix 시간 개념 자체가 2038년에 끝난다는 뜻이 아닙니다. 사용하는 숫자 그릇이 좁아서 생기는 범위 제한입니다. 더 넓은 부호 정수를 사용하면 2038년 이후도 계속 표현할 수 있습니다.

Unix 초UTC의미
21474836462038-01-19 03:14:0632비트 범위 안
21474836472038-01-19 03:14:0732비트 최댓값
21474836482038-01-19 03:14:0832비트 부호 정수 범위 밖

오래 보관할 일정, 계약 만료, 생년월일처럼 2038년 뒤 날짜가 들어갈 수 있다면 사용 중인 파일이나 도구가 더 넓은 범위를 지원하는지 확인하세요.

Unix 시간과 ISO 8601 비교

Unix 값은 짧고 순서를 비교하기 쉽지만 사람이 눈으로 날짜를 알아보기 어렵고 단위를 생략하기 쉽습니다. ISO 8601 형식은 길지만 날짜, 시각, UTC 오프셋을 함께 적을 수 있습니다.

표현예시장점주의점
Unix 초1704067200짧고 정렬하기 쉬움단위와 날짜를 눈으로 알기 어려움
Unix 밀리초17040672000001초 아래를 표현초와 혼동하면 날짜가 크게 달라짐
UTC ISO2024-01-01T00:00:00Z사람이 읽고 시간대가 분명함형식을 정확히 지켜야 함
KST ISO2024-01-01T09:00:00+09:00한국 시각을 바로 알 수 있음오프셋과 지역 이름은 같은 개념이 아님

중요한 시각을 전달할 때는 UTC ISO 형식과 원본 Unix 값, 그리고 단위를 함께 남기는 방법이 안전합니다. 예: 2024-01-01T00:00:00Z (1704067200초).

잘못된 날짜를 막는 확인 순서

  1. 숫자 단위를 찾습니다. s, ms, μs, ns 표시나 원본 설명을 확인합니다.
  2. UTC와 한국 시간을 함께 봅니다. 9시간 때문에 날짜가 바뀌었는지 확인합니다.
  3. 자릿수가 예상과 맞는지 봅니다. 현재 시점의 초는 대개 10자리, 밀리초는 13자리입니다.
  4. 소수나 음수 기호를 보존합니다. 기호를 지우면 다른 순간이 됩니다.
  5. 공유할 때 시간대를 적습니다. Z 또는 +09:00을 포함한 날짜를 함께 남깁니다.

결과가 1970년 근처

밀리초 값을 초로 보려 했거나 초 값을 밀리초로 본 경우가 많습니다. 단위를 바꿔 재확인하세요.

한국 날짜가 하루 다름

UTC 오후 3시 이후는 한국에서 다음 날입니다. 시각뿐 아니라 연·월·일까지 비교하세요.

끝자리가 달라짐

긴 나노초를 일반 숫자로 다루면서 정밀도가 줄었을 수 있습니다. 원본 정수 문자열과 비교하세요.

공식 기준과 더 읽을 자료

시간대 규칙은 국가 정책에 따라 바뀔 수 있습니다. 오래된 역사 시각이나 미래의 특정 지역 시각은 해당 날짜에 적용되는 IANA 시간대 규칙을 함께 확인하세요.

직접 확인하는 시간 도구

Unix 타임스탬프 자주 묻는 질문

Unix 타임스탬프는 어느 시간대를 기준으로 하나요?

기준은 UTC입니다. Unix 값 자체에는 한국, 미국 같은 지역 시간대가 들어 있지 않으며, 표시할 때 선택한 시간대에 따라 시계와 날짜가 달라집니다.

Unix 시간 0은 언제인가요?

Unix 시간 0은 1970년 1월 1일 00:00:00 UTC입니다. 한국 표준시로는 같은 날 오전 9시입니다.

타임스탬프가 10자리면 항상 초인가요?

현재와 가까운 양수 값에서는 10자리가 대개 초이지만 항상 그런 것은 아닙니다. 1970년 근처, 먼 미래, 앞에 0이 붙은 값은 길이만으로 단위를 확정할 수 없으므로 원본 단위와 변환 날짜를 함께 확인하세요.

Unix 시간은 윤초를 세나요?

일반적인 POSIX 방식의 Unix 시간은 윤초를 별도의 한 초로 세지 않습니다. 따라서 UTC 시계에 표시되는 윤초와 Unix 초의 대응은 단순한 누적 초 개념과 차이가 있습니다.

2038년 문제가 모든 타임스탬프에 생기나요?

아닙니다. 2038년 문제는 Unix 초를 32비트 부호 정수로 보관할 때 생기는 범위 제한입니다. 더 넓은 정수 형식을 사용하면 2038년 이후도 표현할 수 있습니다.

타임스탬프와 ISO 8601 중 무엇을 공유하는 게 좋나요?

사람이 읽고 일정으로 확인할 때는 시간대가 명시된 ISO 8601 형식이 편하고, 숫자 비교와 정렬에는 Unix 값이 편합니다. 중요한 시각은 UTC ISO 형식과 원본 Unix 값, 단위를 함께 남기면 오해를 줄일 수 있습니다.