개발자 도구 · Unix 타임스탬프 변환기
시간대는 오프셋이 아닙니다. IANA tz 데이터베이스 및 이것이 중요한 이유
· 배경
타임스탬프 시간대 브라우저 API
오프셋은 숫자입니다. 시간대는 숫자의 기록이자 숫자가 변경되는 규칙입니다. 이 게시물에서는 차이점을 설명하고 이를 인코딩하는 IANA tz 데이터베이스를 소개하며 변환기가 로컬 읽기에 이를 사용하는 이유를 보여줍니다.
한 시간 이동된 회의 — 7월에는 맞았고 12월에는 틀렸던 +02:00의 저장된 오프셋
7월 회의 옆에 저장된 고정 `+02:00`은 그 순간에 대한 충실한 읽기가 될 수 있으며 12월의 규칙으로는 여전히 실패합니다. 오프셋은 하나의 결과입니다. 영역은 다른 날짜에 결과를 생성할 수 있는 규칙 컨텍스트입니다. 하나를 다른 하나인 것처럼 저장하면 스냅샷이 정지됩니다.
ToolAcre의 로컬 행은 Intl에게 각 날짜의 형식을 지정하고 짧은 숫자 오프셋을 요청합니다. 에포크에 구성 상수를 추가하지 않습니다. 이러한 설계를 통해 환경의 적용 가능한 규칙이 모든 순간에 개별적으로 영향을 미칠 수 있습니다.
오프셋 대 구역 — UTC로부터의 고정 거리 대 DST 규칙 및 변경 내역이 있는 명명된 지역
오프셋은 렌더링된 시계가 한 순간에 UTC로부터 얼마나 멀리 떨어져 있는지를 나타냅니다. 명명된 영역에는 일련의 오프셋 규칙과 기록 변경 사항이 포함될 수 있습니다. 시대 자체에는 둘 중 어느 것도 포함되지 않습니다. 애플리케이션에 이벤트와 장소 기반 일정이 모두 필요한 경우 이러한 개념은 별도의 필드를 차지해야 합니다.
불변 이벤트의 경우 순간을 저장하는 것만으로도 충분할 수 있습니다. "이 지역의 매일 09:00에 열기"의 경우 향후 인스턴스는 실제 시간을 기준으로 확인되어야 하므로 명명된 영역을 유지합니다. 어제의 오프셋을 재사용하면 동적 규칙이 영구 숫자 속성으로 처리됩니다.
IANA tz 데이터베이스 — Area/City 이름, 정치적 결정 기록인 이유 및 업데이트 빈도
IANA 데이터베이스, 정치적 출처 및 업데이트 빈도라는 이름의 통합 문서입니다. 구현은 `resolvedOptions()`에서 IANA 스타일 영역 이름을 보고하지만 데이터베이스 버전, 업데이트 일정 또는 소스 패키지를 노출하지 않습니다. 이러한 세부 사항은 여기에서 주장되지 않습니다.
이 제한은 재생산에 영향을 미칩니다. 이전 날짜 출력이 시스템마다 다른 경우 영역 문자열과 플랫폼 버전을 기록하십시오. 어떤 규칙 세트가 시계에서만 더 새로운지 주장하지 마십시오. 명명된 영역은 질문을 개선하지만 변환기는 시간대 데이터 검사기가 아닙니다.
재현 가능한 기록 출력이 필요한 애플리케이션은 영역 데이터 종속성을 제어하고 대표 날짜를 테스트해야 합니다. 지정되지 않은 브라우저 환경에 의존하면 해당 재현성이 위임됩니다.
명명된 영역 규칙 출처 및 업데이트 주기는 이 구현에 의해 노출되지 않습니다.
ToolAcre는 브라우저에 로컬 영역을 요청하고 Intl을 통해 형식을 지정합니다. 저장소는 규칙이 운영 체제, 브라우저 번들 또는 다른 런타임 구성 요소에서 왔는지 여부를 설정하지 않습니다. 해당 내부 아키텍처를 노출하는 대신 오류를 포착하고 안전하게 대체합니다.
결과적으로 "로컬"은 변환 시 브라우저가 선택한 환경을 의미합니다. 장치 설정을 변경하면 에포크를 변경하지 않고도 출력을 변경할 수 있습니다. 감사 추적을 위해 UTC와 원시 개수를 유지합니다. 표준 저장소가 아닌 로컬 디스플레이를 컨텍스트로 사용합니다.
포맷터 오류 시 ISO로 대체하면 순간은 유지되지만 요청된 로컬 프리젠테이션은 손실됩니다. 소비자는 이를 변경된 날짜가 아닌 축소된 표시 컨텍스트로 처리해야 합니다.
브라우저는 로컬 영역을 선택하고 형식을 지정합니다. 규칙의 출처는 주장되지 않습니다.
6개월 간격으로 두 개의 UTC 순간(예: `2025-01-15T12:00:00Z` 및 `2025-07-15T12:00:00Z`)을 선택하고 이를 초로 변환하고 한 장치에서 로컬 행을 검사합니다. 숫자 오프셋이 다른지 여부를 기록합니다. 관찰은 표시된 영역과 환경에 유효합니다.
통합 문서에서는 Europe/Berlin 오프셋을 규정했지만 해당 명명된 영역 규칙은 구현에서 읽혀지지 않았습니다. 이 재현 가능한 연습에서는 동일한 구별(하나의 영역 쿼리, 두 개의 인스턴스 및 잠재적으로 두 개의 오프셋 결과)을 가르치면서 지원되지 않는 테이블을 방지합니다.
오프셋이 일치하는 경우 관찰은 여전히 유익합니다. 구성된 영역은 해당 환경에서 선택한 순간에 계절적 차이를 노출하지 않았습니다.
실제 사례: 베를린 규칙을 하드 코딩하는 대신 두 날짜에 하나의 브라우저 영역을 관찰합니다.
패널에서는 지역 약어보다 GMT+1과 같은 숫자 관계를 선호하는 `timeZoneName: "shortOffset"`을(를) 요청합니다. 이 선택은 정확한 Intl 형식이 플랫폼 출력으로 유지되지만 상황에 따라 의미가 달라질 수 있는 레이블에 대한 의존도를 줄입니다.
저장된 데이터의 경우 약어를 표시하는 대신 애플리케이션이 선택한 라이브러리에서 정의한 표준 영역 식별자를 사용합니다. 사용자에게 표시되는 짧은 라벨은 도움이 될 수 있지만 향후 일정을 재구성하는 핵심이 되어서는 안 됩니다.
숫자 오프셋은 한 순간에 산술적으로 명확하게 유지됩니다. 이들의 한계는 규칙 ID가 누락되었다는 점이며, 한 시계를 UTC로 다시 매핑할 수 없다는 점입니다.
저장된 데이터에서는 약어를 사용하지 않습니다. 포맷터가 짧은 숫자 오프셋을 요청합니다.
향후 반복 예약에는 이 변환기가 제공하지 않는 간격, 중복 및 정책 처리가 필요합니다. 해결된 날짜 또는 시대로 시작하여 렌더링합니다. 반복되는 두 현지 시간 중에서 선택하거나 존재하지 않는 시간을 수정하지 않습니다.
요구 사항에 따라 동작이 테스트되는 영역 인식 일정 라이브러리를 사용한 다음 도움이 되는 경우 여기에서 해결된 발생을 검사합니다. 디스플레이에서 해상도를 분리하면 간단한 변환기가 정의되지 않은 에지 정책을 사용하여 실수로 스케줄러가 되는 것을 방지할 수 있습니다.
그런 다음 스케줄러의 출력을 실행을 위한 에포크로 저장할 수 있으며, 동시에 향후 재계산 또는 설명을 위해 영역 및 원래 벽 시간 의도를 유지할 수 있습니다.
요점: 순간을 신기원으로 저장하고 장소를 구역 이름으로 저장하며 Unix 타임스탬프 변환기가 로컬 읽기를 위해 브라우저 구역을 사용하는 방법
순간을 명시적인 epoch 단위 또는 표준 UTC 문자열로 저장하고 장소 자체가 중요한 경우 명명된 영역을 저장합니다. 오프셋은 설명을 위한 출력과 함께 제공될 수 있지만 두 필드를 대체할 수는 없습니다. ToolAcre의 UTC와 로컬 행은 이러한 분리를 보여줍니다.
지역 결과가 놀라울 경우 데이터를 변경하기 전에 구역 레이블, 순간 및 오프셋을 확인하십시오. 고정 오프셋 패치로 인해 한 날짜는 올바른 것처럼 보이고 다른 날짜는 잘못된 것처럼 보일 수 있습니다. 내구성이 뛰어난 모델은 이벤트를 안정적으로 유지하고 검증된 구역 규칙이 시계 문자판을 제공하도록 합니다.
이 모델은 여행도 지원합니다. 사용자는 이벤트를 다시 작성하거나 원래 일정 컨텍스트를 잃지 않고 새로운 로컬 영역에 저장된 하나의 순간을 볼 수 있습니다.