유닉스 타임스탬프 변환기 (에포크 ⇄ 날짜)
입력
| 변환 방향 | 에포크 → 날짜 |
|---|---|
| 유닉스 타임스탬프 | 1,784,550,784 |
| 타임스탬프 단위 | 초 |
| 날짜 | 2026년 7월 20일 |
유닉스 타임스탬프 변환기 (에포크 ⇄ 날짜)
유닉스 타임스탬프(에포크 값)를 UTC 날짜 및 ISO 8601 형식으로 변환하거나, 달력 날짜를 에포크 초 및 밀리초로 변환합니다.
입력
입력
결과
값을 입력하면 계산 결과가 표시됩니다.
결과
유닉스 타임스탬프 (에포크 ⇄ 날짜)
유닉스 타임스탬프는 1970-01-01 00:00:00 협정 세계시(UTC)를 기준으로 경과한 초 수를 나타내는 정수입니다. 시간대나 달력 체계와 무관하게 시각을 고유하게 표현할 수 있어, 운영 체제와 프로그래밍 언어 전반에서 시각 데이터의 표준 저장·전달 형식으로 사용됩니다. 이 계산기는 에포크 값과 사람이 읽을 수 있는 UTC 날짜 사이의 양방향 변환을 수행합니다.
유닉스 에포크의 기원
기준 시점인 1970-01-01 00:00:00 UTC는 1960년대 말 벨 연구소의 유닉스 운영 체제 개발 과정에서 채택된 역사적 관례입니다. 당시 개발팀은 시간 계산에 사용할 고정 기준점이 필요했고, 정확한 날짜보다는 모든 기계에서 일관성을 유지하는 것이 중요했습니다. 이 관례는 POSIX 표준으로 이어졌으며, 오늘날 사실상 모든 운영 체제와 프로그래밍 언어에서 채택하고 있습니다.
타임스탬프 값 0은 에포크 기준 시점 자체를 나타냅니다. 값 86,400은 정확히 하루 뒤(60초 × 60분 × 24시간)에 해당합니다. 음수 값은 1970년 이전 시각을 나타내며, 대부분의 현대 구현에서 수천 년 전의 날짜까지 표현 가능합니다.
초와 밀리초
원래 유닉스 표준은 초(second) 단위를 기준으로 합니다. 서버 로그, 데이터베이스 레코드, 셸 유틸리티 등 유닉스 계열 환경에서는 대부분 초 단위 타임스탬프를 사용하며, 2000년대~2030년대 날짜는 10자리 값으로 표현됩니다.
JavaScript는 밀리초(millisecond) 단위 변형을 도입했습니다. Date.now()와 Date.getTime()은 에포크부터의 밀리초 수를 반환하며 13자리 값을 생성합니다. 다수의 REST API, 이벤트 스트림, JavaScript 생태계의 데이터베이스가 이 방식을 따릅니다.
판단 기준: 10자리이면 초, 13자리이면 밀리초입니다. 밀리초를 초로 변환하려면 1,000으로 나누면 됩니다. 이 계산기는 밀리초 단위를 선택하면 이 변환을 자동으로 처리합니다.
변환 방식
에포크 → 날짜. 초 단위 타임스탬프 가 주어지면, UTC 날짜 및 시각은 다음과 같이 계산됩니다.
일수일중 시각=⌊86,400t⌋=tmod86,400일수는 윤년을 고려한 그레고리력으로 변환되며, 일중 시각은 시·분·초로 분해됩니다.
날짜 → 에포크. UTC 자정 기준의 달력 날짜가 주어지면, 1970-01-01부터의 경과 일수를 세어 86,400을 곱합니다. 예를 들어 2024-01-01의 경우 경과 일수는 19,723일이므로 에포크 값은 다음과 같습니다.
이 계산기는 내부적으로 윤년과 달력 경계를 정확하게 처리하는 Temporal API를 사용합니다.
2038년 문제
다수의 레거시 시스템은 유닉스 타임스탬프를 32비트 부호 있는 정수로 저장합니다. 32비트 부호 있는 정수가 표현할 수 있는 최대값은 2,147,483,647이며, 이는 2038-01-19 03:14:07 UTC에 해당합니다. 이 시각 이후 카운터가 32비트 음수 최솟값으로 순환하면, 해당 시스템은 날짜를 1901-12-13으로 잘못 해석합니다.
현대의 64비트 시스템은 이 문제에 영향을 받지 않습니다. 64비트 부호 있는 정수는 과거·미래로 약 2,920억 년 범위의 타임스탬프를 표현할 수 있어 실용적인 관점에서 제한이 없습니다. 2038년 문제는 유닉스 에포크 방식 자체의 결함이 아니라, 64비트 시간 저장 방식으로 전환하지 않은 레거시 임베디드 시스템, 구형 데이터베이스, 미갱신 소프트웨어에 국한된 문제입니다. 주요 운영 체제·데이터베이스·프로그래밍 언어의 대부분은 2020년 이전에 이미 64비트 시간으로 전환했습니다.
주의 사항
시간대. 유닉스 타임스탬프는 항상 1970-01-01 UTC 자정을 기준으로 초 수를 셉니다. 타임스탬프에는 시간대 정보가 포함되어 있지 않습니다. 현지 시각을 에포크로 변환할 때는 먼저 UTC로 변환해야 합니다. 이 계산기는 날짜 입력에 UTC 자정을 기준으로 적용하며, 이는 날짜만 입력하는 경우의 표준 해석 방식입니다.
윤초. 유닉스 에포크는 윤초를 반영하지 않으며, 모든 날이 정확히 86,400초라고 가정합니다. 따라서 유닉스 타임스탬프는 국제 원자시(TAI)나 정밀 시간 기관이 관리하는 경과 초 수와 엄밀히 일치하지 않습니다. 2024년 기준으로 누적 차이는 약 27초이며, 일반적인 소프트웨어 용도에서는 무시할 수 있는 수준입니다.
외부 시스템과의 정수 오버플로. 호스트 운영 체제가 64비트 시간을 사용하더라도, 서드파티 라이브러리·데이터베이스 컬럼 타입·직렬화 형식이 타임스탬프를 32비트 정수로 저장하는 경우가 있습니다. 2038년 전후의 정밀도가 중요한 외부 시스템과 연동할 때는 저장 비트 폭을 반드시 확인하세요.
자주 묻는 질문 (FAQ)
유닉스 타임스탬프란 무엇인가요?
유닉스 타임스탬프(POSIX 타임스탬프 또는 에포크 시간이라고도 합니다)는 1970-01-01 00:00:00 UTC(유닉스 에포크)를 기준으로 경과한 초 수를 나타내는 정수입니다. 이 기준 시점은 1960년대 말 벨 연구소에서 유닉스 운영 체제를 개발할 당시 채택된 역사적 관례로, 정확한 날짜 자체보다 시스템 간 일관성이 중요했습니다.
타임스탬프는 시간대나 달력 체계와 무관한 단일 정수이므로, 컴퓨터 시스템이 시각 정보를 저장하고 전달하는 데 사용하는 표준 방식입니다. 사람이 읽을 수 있는 날짜로 변환할 때는 어떤 시간대를 적용할지 지정해야 하며, 이 계산기는 항상 협정 세계시(UTC)를 기준으로 변환합니다.
초와 밀리초를 어떻게 구분하나요?
표준 유닉스 타임스탬프는 초 단위를 기준으로 합니다. 10자리 값(예: 1,700,000,000)은 거의 확실히 초 단위로, 이는 2023년 무렵의 날짜에 해당합니다. 13자리 값(예: 1,700,000,000,000)은 높은 확률로 밀리초 단위이며, JavaScript의 Date.now()·Date.getTime() 또는 다수의 REST API와 로그 시스템에서 생성됩니다.
실용적인 판단 기준: 10자리이면 초, 13자리이면 밀리초입니다. 11~12자리 값은 마이크로초이거나 비표준 단위일 수 있으므로, 해당 데이터 출처의 문서를 확인하세요.
2038년 문제란 무엇인가요?
일부 구형 시스템은 유닉스 타임스탬프를 32비트 부호 있는 정수로 저장합니다. 이 형식이 표현할 수 있는 최대값은 2,147,483,647로, 2038-01-19 03:14:07 UTC에 해당합니다. 이 시각이 지나면 카운터가 음수 최솟값으로 되돌아가 해당 시스템이 날짜를 1901년으로 잘못 해석하게 됩니다.
현대의 64비트 시스템은 이 문제에 영향을 받지 않습니다. 64비트 부호 있는 정수는 수천억 년 과거부터 미래까지의 타임스탬프를 표현할 수 있습니다. 2038년 문제는 유닉스 에포크 방식 자체의 한계가 아니라, 아직 64비트 시간 저장 방식으로 전환하지 않은 레거시 임베디드 시스템·구형 데이터베이스·소프트웨어에 국한된 문제입니다.