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비트 초 기반 스토리지를 피하세요.
- 데이터를 일괄 정리하는 방법은 무엇입니까? 정규식 사전 필터 + 길이 기반 스케일링을 사용한 다음 변환기로 파이프합니다. **배치 타임스탬프 변환기**를 사용해 보세요.