Guide

잘못된 타임스탬프: 빠른 진단 및 수정

빠른 진단 체크리스트

  • 길이 확인: 10=초, 13=ms, 16=μs, 19=ns.
  • 숫자 확인: 숫자만; 공백/문자를 제거하십시오.
  • 범위 확인: 결과 날짜가 타당하고 64비트가 안전한가요?
  • 시간대 확인: 먼저 UTC로 변환한 다음 목표 오프셋을 적용합니다.
  • DST 경계 확인: 지역화하는 경우 IANA 영역(America/New_York)을 사용합니다.

지금 바로 확인해야 합니까? Unix 타임스탬프 변환기 또는 **배치 변환기**로 이동하세요.

일반적인 오류 유형

  • 길이 불일치: 13자리는 초로 처리 → 먼 미래 날짜입니다.
  • 비숫자 문자: 숨겨진 공백, 쉼표 또는 문자.
  • 범위 초과: 2038년을 초과하는 32비트 초 오버플로; 일부 시스템에서는 네거티브가 지원되지 않습니다.
  • 시간대 모호성: 서버 현지 시간과 예상 UTC.
  • DST 교대: 누락된 시간 동안 현지 시간으로 구문 분석하면 오류가 발생합니다.

유효성 검사 단계(복사-붙여넣기)

// JavaScript: validate & normalize to milliseconds
export function normalizeEpoch(raw) {
  const trimmed = raw.trim();
  if (!/^[0-9]+$/.test(trimmed)) throw new Error("Digits only");
  const len = trimmed.length;
  if (len === 10) return Number(trimmed) * 1000;
  if (len === 13) return Number(trimmed);
  if (len === 16) return Number(trimmed) / 1000;
  if (len === 19) return Number(trimmed) / 1_000_000;
  throw new Error("Invalid length");
}
# Python: validate & to datetime (UTC)
from datetime import datetime, timezone

def parse_epoch(raw: str) -> datetime:
    if not raw.isdigit():
        raise ValueError("Digits only")
    n = len(raw)
    if n == 10:
        ts = int(raw)
    elif n == 13:
        ts = int(raw) / 1000
    elif n == 16:
        ts = int(raw) / 1_000_000
    elif n == 19:
        ts = int(raw) / 1_000_000_000
    else:
        raise ValueError("Invalid length")
    return datetime.fromtimestamp(ts, tz=timezone.utc)
-- SQL (PostgreSQL): validate timestamp length in a table
SELECT id, ts_raw,
       CASE
         WHEN ts_raw ~ '^[0-9]{10}$' THEN 'seconds'
         WHEN ts_raw ~ '^[0-9]{13}$' THEN 'milliseconds'
         WHEN ts_raw ~ '^[0-9]{16}$' THEN 'microseconds'
         WHEN ts_raw ~ '^[0-9]{19}$' THEN 'nanoseconds'
         ELSE 'invalid'
       END AS ts_precision
FROM events
WHERE ts_raw !~ '^[0-9]{10}$'
   OR ts_raw::numeric > 32503680000; -- > 3000-01-01 as a sanity bound

템플릿 수정

  • 정밀도 수정: 길이 감지 → 밀리초 단위로 조정 → 구문 분석 다시 실행.
  • 자르기/삭제: 정규식 유효성 검사 전에 공백과 쉼표를 제거합니다.
  • 레인지 가드: 그럴듯한 창 밖의 값을 제한하거나 삭제합니다(예: < 2000 또는 > 2100 연도).
  • 시간대 수정: UTC로 구문 분석한 다음 사용자의 대상 오프셋/시간대로 형식을 지정합니다.
  • DST 안전 구문 분석: UTC를 선호합니다. 로컬이 필요한 경우 IANA 영역 라이브러리를 사용하세요.

FAQ

  • 가장 안전한 기본값은 무엇입니까? UTC로 구문 분석한 다음 요청한 시간대로 형식을 지정합니다.
  • 2038 문제를 방지하려면 어떻게 해야 합니까? 64비트 정수로 저장합니다. 32비트 초 기반 스토리지를 피하세요.
  • 데이터를 일괄 정리하는 방법은 무엇입니까? 정규식 사전 필터 + 길이 기반 스케일링을 사용한 다음 변환기로 파이프합니다. **배치 타임스탬프 변환기**를 사용해 보세요.

관련 도구 및 가이드