Unix 타임스탬프 형식 설명

모든 Unix 타임스탬프 형식의 완전한 참조 — 초, 밀리초, 마이크로초, ISO 8601, RFC 2822 — 와 각 언어와 데이터베이스가 어떤 형식을 쓰는지 보여주는 예제.

초 단위 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(HTTP에서는 RFC 1123이라고도 함)는 이메일 헤더와 HTTP 응답에 쓰이는 날짜 형식입니다. JavaScript의 Date.toUTCString()이 이 형식을 반환합니다.

  • 예: Wed, 15 Nov 2023 06:13:20 GMT
  • 사용처: HTTP 응답 헤더(Last-Modified, Date, Expires), 이메일 헤더(Date:)
  • JavaScript: date.toUTCString()
  • 현대 API에서는 드물지만 웹 인프라에서는 여전히 널리 보입니다

타임스탬프 형식을 식별하는 법

알 수 없는 타임스탬프 값을 받으면 다음 규칙으로 형식을 식별하세요:

  • 10자리, 1로 시작 → Unix 초(예: 1700000000)
  • 13자리, 1로 시작 → Unix 밀리초(예: 1700000000000)
  • 음수 → 1970년 이전의 Unix 초 또는 밀리초
  • T 또는 Z 포함 → ISO 8601(예: 2023-11-15T06:13:20Z)
  • 쉼표나 요일 이름 포함 → RFC 2822(예: Wed, 15 Nov 2023 ...)
  • 16자리 → 마이크로초(초로 만들려면 1,000,000으로 나눔)
  • 19자리 → 나노초(초로 만들려면 1,000,000,000으로 나눔)

마이크로초와 나노초

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

  • 마이크로초(µ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)으로 나눔

Unix 타임스탬프 형식 FAQ

Unix 타임스탬프는 몇 자리인가요?
현대 Unix 타임스탬프는 초로 10자리(약 17억), 밀리초로 13자리입니다. 마이크로초는 16자리, 나노초는 19자리입니다.
Unix 시간과 ISO 8601의 차이는?
Unix 시간은 1970년 UTC 이후의 초 또는 밀리초인 단일 숫자로 시간대를 담지 않습니다. ISO 8601은 2023-11-15T06:13:20Z 같은 자기 기술적 문자열로 날짜, 시간, 오프셋을 담습니다.
초인지 밀리초인지 어떻게 식별하나요?
자릿수를 세세요: 10자리는 초, 13자리는 밀리초입니다. 값이 1970년 근처나 먼 미래 날짜로 변환되면 단위를 잘못 읽은 것입니다.