Epoch to Date

에포크 시간을 읽기 쉬운 날짜로 변환하는 방법

Epoch 시간을 날짜로 변환하는 것은 두 단계입니다: 숫자를 UTC의 한 순간으로 디코딩한 다음, 그 순간을 원하는 시간대로 포맷하는 것입니다. 이 가이드는 멘탈 모델, 초와 밀리초를 구별하는 법, UTC 대 로컬 결정을 설명하고 언어별 레시피와 순간 변환기로 안내합니다.

Epoch에서 날짜는 두 단계

Epoch 타임스탬프를 읽기 쉬운 날짜로 변환하는 것은 늘 같은 두 단계입니다: 숫자를 UTC의 한 순간으로 디코딩한 다음, 그 순간을 표시하려는 시간대로 포맷합니다. 숫자 자체는 시간대를 지니지 않으며 — 하나의 순간일 뿐 — 그래서 같은 값도 포맷하는 시간대에 따라 다른 벽시계 시각(때로는 다른 달력 날짜)으로 표시됩니다. 아래 표는 하나의 타임스탬프를 여러 시간대로 나타낸 것입니다. 이 가이드의 나머지는 단위, 시간대 선택, 코드를 다룹니다.

시간대1700000000의 로컬 날짜와 시간
UTC(정준 순간)2023-11-14 22:13:20 · ISO 2023-11-14T22:13:20Z
America/New_York2023-11-14 17:13:20 (EST)
Asia/Tokyo2023-11-15 07:13:20 (JST)
Australia/Sydney2023-11-15 09:13:20 (AEDT)

Epoch 시간이란?

Epoch 시간(Unix 시간 또는 POSIX 시간이라고도 함)은 1970년 1월 1일 00:00:00 UTC 이후 경과한 초의 수입니다. 컴퓨팅에서 시점을 표현하는 보편적 표준입니다. 모든 프로그래밍 언어와 운영체제가 기본 지원하여, 시스템 간 타임스탬프 저장·교환에 가장 신뢰할 수 있는 형식입니다.

1단계 — 초인지 밀리초인지 식별하기

변환하기 전에 단위를 파악하세요. 거의 언제나 자릿수로 읽어낼 수 있으며, 이를 잘못 읽는 것이 잘못된 날짜의 가장 흔한 원인입니다.

  • 10자리(예: 1700000000) → Unix 에포크 이후의 초
  • 13자리(예: 1700000000000) → Unix 에포크 이후의 밀리초
  • 16자리 → 마이크로초; 19자리 → 나노초
  • 확실하지 않으면 디코딩된 연도가 합리적인지 확인하세요 — 1970년이나 먼 미래의 날짜는 단위를 잘못 읽었다는 뜻입니다
  • 위 변환기는 단위를 자동으로 감지합니다

2단계 — UTC로 디코딩한 다음 시간대 선택하기

Unix 타임스탬프는 정확히 하나의 순간으로 디코딩됩니다. 그 순간을 UTC로 표시할지 로컬 시간대로 표시할지는 숫자의 속성이 아니라 표현상의 결정입니다. 기계를 향한 모든 것 — 로그, API, 데이터베이스 저장, 서버 간 비교 — 에는 UTC를 선택하고, 사람에게 날짜를 보여주는 바로 그 순간에만 사용자의 IANA 시간대로 변환하세요. 시간대는 항상 IANA 이름(America/New_York)으로 식별하고, 맨 오프셋으로는 식별하지 마세요. 그래야 서머타임이 자동으로 적용됩니다.

  • 기계를 향함(로그, API, 저장) → UTC로 표시, Z가 붙은 ISO 8601
  • 사용자를 향함(마감, UI의 타임스탬프) → 사용자의 IANA 시간대로 변환
  • 로컬 시간을 시간대 없이 저장하지 말 것 — UTC와 IANA 시간대 이름을 저장하라

코드로 변환하기

모든 현대 언어에는 두 단계를 모두 수행하는 한 줄짜리 내장 기능이 있습니다. 패턴은 늘 같습니다: 함수가 기대하는 단위로 값을 전달하고 UTC 또는 특정 시간대를 요청하세요. JavaScript 등은 아래에 있으며, 동반 레시피가 JavaScript, Python, PHP, Java, C#, Go, SQL, Excel, Google Sheets를 완전하게 다룹니다.

  • JavaScript: new Date(1700000000 * 1000).toISOString() → "2023-11-14T22:13:20.000Z"
  • Python: datetime.fromtimestamp(1700000000, tz=timezone.utc).isoformat()
  • Shell: date -u -d @1700000000 (GNU) / date -u -r 1700000000 (BSD, macOS)
  • SQL: TO_TIMESTAMP(1700000000) (Postgres), FROM_UNIXTIME(1700000000) (MySQL)
  • 규칙: 초가 기대되는 곳에 초를 전달하라 — × 1000이 필요한 것은 JavaScript의 Date뿐

Epoch 시간 변환 시 흔한 실수

Unix 타임스탬프를 변환할 때 가장 흔한 오류입니다:

  • JavaScript에서 초에 1000 곱하기를 잊음 — new Date(1700000000)은 2023년이 아니라 1970년이 됨
  • JavaScript 밀리초를 서버 측 언어에서 그대로 초로 사용(1000배 오류)
  • 시간대를 지정하지 않고 환경마다 다른 서버 로컬 시간대에 의존
  • 타임스탬프를 정수가 아닌 문자열로 저장하여 숫자 비교와 연산이 깨짐
  • Python에서 사용 중단된 datetime.utcfromtimestamp()를 사용 — 대신 fromtimestamp()에 tz=timezone.utc를 전달하라

관련 글

FAQ

Epoch 시간을 날짜로 어떻게 변환하나요?
값이 초(10자리)인지 밀리초(13자리)인지 식별한 다음, 언어의 날짜 API로 변환하세요 — JavaScript에서는 new Date(seconds * 1000), Python에서는 datetime.fromtimestamp(seconds, tz=timezone.utc), 또는 위 변환기에 붙여넣으세요.
Unix 타임스탬프로 new Date()가 1970이 되는 이유는?
밀리초를 기대하는 함수에 초 값을 전달했기 때문이며, 대개 JavaScript의 new Date()입니다. 먼저 10자리 초 값을 1000으로 곱하세요.
Epoch 시간을 UTC로 변환해야 하나요, 아니면 로컬 시간으로?
로그, API, 서버 간 비교에는 UTC를 사용하고, 사용자의 로컬 시간대로의 변환은 표시할 때만 하세요. Epoch 값 자체는 시간대 중립적입니다.
JavaScript에서 Unix 타임스탬프로 날짜를 어떻게 얻나요?
new Date(seconds * 1000)은 Date 객체를 반환하며 toISOString(), toUTCString(), Intl.DateTimeFormat으로 포맷할 수 있습니다. JavaScript의 Date는 초가 아니라 밀리초를 기대하므로 곱셈이 필요합니다.
Python에서 Unix 타임스탬프로 날짜를 어떻게 얻나요?
시간대를 인식하는 UTC datetime에는 datetime.fromtimestamp(seconds, tz=timezone.utc)를 사용하세요. 로컬 시간은 tz 인자를 생략하고, ISO 8601 문자열은 .isoformat()을 덧붙이세요.
같은 Epoch 값이 시간대마다 다른 날짜가 되나요?
순간은 어디서나 같지만, 표시하는 벽시계 날짜는 시간대에 따라 달라지며 — 심지어 다른 달력 날짜가 될 수도 있습니다. 1700000000은 뉴욕에서는 11월 14일, 도쿄에서는 11월 15일입니다.
타임스탬프를 날짜로 어떻게 변환하나요?
모든 현대 언어에는 한 줄짜리 내장 기능이 있습니다. 가장 어려운 부분은 타임스탬프가 초(10자리)인지 밀리초(13자리)인지 식별하는 것입니다 — 단위만 맞으면 변환 자체는 결코 실패하지 않습니다.