Timestamp Formats

Unix 타임스탬프 형식 설명

모든 Unix 타임스탬프 형식의 완전한 참고 자료 — 초, 밀리초, 마이크로초, ISO 8601, RFC 2822 — 각 언어와 데이터베이스가 어떤 형식을 쓰는지 보여 주는 예시와, 한눈에 구분하는 법을 함께.

모든 Unix 타임스탬프 형식 한눈에

Unix 타임스탬프는 그저 숫자이고, 그 형식은 사실 그 단위 — 1970년 1월 1일 UTC부터 얼마나 정밀하게 세는지 — 일 뿐입니다. 단위는 거의 항상 자릿수로 읽힙니다: 10자리는 초, 13은 밀리초, 16은 마이크로초, 19는 나노초. 두 문자열 형식 ISO 8601과 RFC 2822는 대신 자기 기술적입니다. 아래 표가 전체 그림이고, 그 뒤의 절들이 각 형식과 구분법을 다룹니다.

형식자릿수쓰는 곳
101700000000Python, PHP, Go, Ruby, C, SQL
밀리초131700000000000JavaScript, Java, .NET
마이크로초161700000000000000PostgreSQL, Rust
나노초191700000000000000000Go UnixNano, 트레이싱 시스템
ISO 8601문자열2023-11-15T06:13:20ZAPI, 로그(자기 기술적)
RFC 2822문자열Wed, 15 Nov 2023 06:13:20 GMT이메일, HTTP 헤더

초 단위 Unix 시간 — 보편적 형식

가장 흔한 형식: 1970년 1월 1일 00:00:00 UTC 이후의 온전한 초를 세는 32비트 또는 64비트 정수. 현재 약 17억의 10자리 숫자입니다.

  • 예: 1700000000 = 2023-11-15 06:13:20 UTC
  • 쓰는 곳: Python time.time(), PHP time(), Go time.Now().Unix(), Ruby Time.now.to_i, C time(NULL)
  • 저장 형태: 32비트 int(레거시, 최대 연도 2038), 64비트 int(현대, 수십억 년 안전)
  • 데이터베이스: MySQL UNIX_TIMESTAMP(), PostgreSQL EXTRACT(EPOCH FROM NOW())::BIGINT

밀리초 단위 Unix 시간 — JavaScript의 형식

Unix 에포크 이후의 밀리초: 밀리초 정밀도를 제공하는 13자리 정수. JavaScript의 Date 객체가 내부적으로 쓰는 형식입니다.

  • 예: 1700000000000 = 2023-11-15 06:13:20.000 UTC
  • 쓰는 곳: JavaScript Date.now(), Java System.currentTimeMillis(), .NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
  • 초로 변환: Math.floor(ms / 1000)
  • 초에서 변환: seconds * 1000

ISO 8601 — 사람이 읽기 좋은 표준

ISO 8601은 날짜와 시각을 문자열로 표현하는 국제 표준입니다. Unix 타임스탬프와 달리 자기 기술적입니다: 형식이 날짜/시각과 시간대 오프셋을 모두 부호화합니다.

  • 2023-11-15T06:13:20Z — UTC(Z 접미사는 UTC를 뜻함)
  • 2023-11-15T01:13:20-05:00 — 명시적 UTC 오프셋 포함(EST)
  • 2023-11-15T06:13:20.000Z — 밀리초 포함
  • JavaScript: date.toISOString()은 항상 Z 접미사의 UTC를 반환
  • Python: datetime.isoformat(), Go: time.Format(time.RFC3339)

RFC 2822 — 이메일과 HTTP 날짜 형식

RFC 2822(이메일은 RFC 5322로 갱신, HTTP는 RFC 9110으로 반영)는 이메일 헤더와 HTTP 응답에서 쓰이는 사람이 읽기 좋은 날짜 형식입니다. JavaScript의 Date.toUTCString()이 이 형식을 반환합니다.

  • 예: Wed, 15 Nov 2023 06:13:20 GMT
  • 쓰이는 곳: HTTP 응답 헤더(Last-Modified, Date, Expires), 이메일 헤더(Date:)
  • JavaScript: date.toUTCString()
  • 현대 API에서는 드물지만 웹 인프라에서는 아직 널리 마주침

타임스탬프 형식을 감지하는 법

알 수 없는 타임스탬프 값을 받았을 때 이 규칙들이 그 형식을 식별합니다. 자릿수가 모든 숫자 사례를 정하고, 두 문자열 형식은 보면 바로 명백합니다.

단서형식
10자리Unix 초
13자리Unix 밀리초
16자리마이크로초
19자리나노초
T 또는 Z 포함ISO 8601
쉼표 또는 요일 이름RFC 2822
음의 정수1970년 이전의 초 또는 밀리초
  • 상식 점검: 어떤 숫자 값이든 현재 시대(10자리 초면 대략 2001~2038년)의 믿을 만한 날짜로 디코딩되어야 함
  • 1970년 근처나 수천 년 떨어진 날짜는 단위를 잘못 읽었다는 뜻

마이크로초와 나노초

일부 고정밀 시스템은 밀리초보다 작은 단위를 씁니다. 애플리케이션 코드에서는 드물지만 저수준 시스템, 데이터베이스 내부, 관측성 도구에 나타납니다.

  • 마이크로초(µs): 16자리 정수 — Rust SystemTime as_micros(), PostgreSQL clock_gettime()
  • 나노초(ns): 19자리 정수 — Go time.Now().UnixNano(), Rust SystemTime as_nanos()
  • PostgreSQL EXTRACT(EPOCH)는 마이크로초를 소수부로 갖는 부동소수점 수를 반환
  • 나노초를 초로 변환: 1,000,000,000(1e9)으로 나눔

해상도와 초 미만 정밀도

위의 각 형식은 서로 다른 시간 해상도를 지닙니다. 형식을 고른다는 것은 두 순간을 얼마나 정밀하게 구별할 수 있는지 — 1초부터 1나노초까지 — 를 고르는 것입니다.

  • 1초 해상도: Unix 초(10자리), 전통적 POSIX time_t
  • 1밀리초: JavaScript Date, MongoDB BSON Date, Java Instant.toEpochMilli()
  • 1마이크로초: Chrome/WebKit 타임스탬프, Python datetime.timestamp(), PostgreSQL timestamp precision 6
  • 100나노초: Windows FILETIME, .NET DateTime.Ticks
  • 1나노초: Java Instant(완전 정밀도), Go time.UnixNano(), JS Temporal.Instant.epochNanoseconds(BigInt)
  • 피코초 이하: PTP/IEEE 1588 와이어 형식(1초의 1/2^32), NTP 소수 필드
  • 필요를 충족하는 가장 거친 해상도를 골라라 — 초 미만 정밀도는 JSON 직렬화나 문자열 왕복에서 자주 손실됨
  • 형식 간 변환 시 Unix 밀리초나 나노초(BigInt 경유)를 거쳐라 — 그것이 정밀도를 보존하는 최소 공통분모

타임스탬프 형식 변환기

Unix 시간과, 현장에서 마주치는 플랫폼별 타임스탬프 형식 사이를 변환하세요:

FAQ

Unix 타임스탬프는 몇 자리인가요?
현대의 초 단위 Unix 타임스탬프는 10자리(약 17억), 밀리초 단위는 13자리입니다. 마이크로초는 16자리, 나노초는 19자리입니다.
JavaScript는 어떤 타임스탬프 형식을 쓰나요?
JavaScript의 Date는 밀리초로 동작합니다 — Date.now()는 13자리 밀리초 타임스탬프를 반환하고, new Date(ms)는 밀리초를 기대합니다. Date에 넘기기 전에 Unix 초에 1000을 곱하세요.
Unix 시간과 ISO 8601의 차이는 무엇인가요?
Unix 시간은 1970년 UTC 이후의 초 또는 밀리초를 나타내는 단일 숫자이며 시간대를 갖지 않습니다. ISO 8601은 2023-11-15T06:13:20Z 같은 자기 기술적 문자열로 날짜, 시각, 오프셋을 부호화합니다.
RFC 2822 날짜 형식이란 무엇인가요?
RFC 2822(RFC 5322로 갱신)는 이메일과 HTTP 헤더에서 쓰이는 사람이 읽기 좋은 날짜 형식으로, "Wed, 15 Nov 2023 06:13:20 GMT" 같은 것입니다. JavaScript는 date.toUTCString()으로 생성합니다.
타임스탬프가 초인지 밀리초인지 어떻게 구분하나요?
자릿수를 세세요 — 10자리 값은 초, 13자리 값은 밀리초입니다. 값이 1970년 근처나 먼 미래의 날짜로 변환되면 단위를 잘못 읽은 것입니다.