한국어

개발자 도구 · Unix 타임스탬프 변환기

하나의 타임스탬프, 두 개의 시계: 한 에포크 동안 UTC와 현지 시간이 다른 이유

· 작동 방식

타임스탬프 유닉스 시간 시간대

바늘이 다른 두 개의 시계에 연결된 단일 순간
원본 ToolAcre 벡터 일러스트레이션

에포크 값은 한 순간의 이름을 지정하지만 표시되는 벽시계 시간은 현재 위치에 따라 다릅니다. 이 게시물에서는 오프셋 산술, 날짜 자체가 다를 수 있는 이유, 변환기가 두 판독값을 모두 표시하는 이유에 대해 설명합니다.

고객이 오전 9이라고 말하고 로그에 16:00라고 적혀 있습니다. — 동일한 이벤트, 두 개의 시계, 아무데도 가지 않는 지원 티켓

애플리케이션 로그에 16:00이 기록되는 동안 한 사람이 "아침 9시"라고 보고하면 지원 사례가 중단될 수 있습니다. 시계 라벨은 해당 구역이나 오프셋이 알려질 때까지 이벤트를 식별하지 않습니다. 두 참조가 모두 동일한 epoch로 해석되는 경우 7시간의 처리 지연을 검색하면 표시 차이에 대한 조사가 낭비됩니다.

원시 타임스탬프와 각 관찰자의 영역 컨텍스트를 수집하는 것부터 시작하세요. ToolAcre는 UTC와 한 번의 변환에서 현재 브라우저 로컬 판독값을 표시하므로 로그를 보유한 사람이 즉시 비교할 수 있습니다. 다른 곳에 있는 동료는 공유 ISO 값을 비교해야 하며, 첫 번째 사람의 로컬 행이 자신의 컴퓨터에 적용된다고 가정해서는 안 됩니다.

에포크는 벽시계 시간이 아닌 순간입니다. 자체 영역이 없는 1970 이후의 초 수입니다.

에포크는 1970-01-01T00:00:00Z로부터의 거리(초 또는 밀리초)입니다. 여기에는 도시, 일광 절약 시간제 플래그 또는 기본 시계 표기법이 포함되어 있지 않습니다. 따라서 1,700,000,000 값은 하나의 순간을 식별합니다. 화요일 저녁이나 수요일 아침과 같은 라벨은 해당 순간을 읽는 방법을 선택한 후에 만들어진 예측입니다.

이것이 바로 수정된 "로컬 에포크"를 저장하는 것이 카테고리 오류인 이유입니다. 오프셋을 추가하면 다음 순간에 개수와 포인트가 변경됩니다. 원래 순간을 저장하거나 전송한 다음 달력이 필요한 가장자리에 읽기 규칙을 적용합니다. ToolAcre는 형식화된 출력 옆에 숫자 초와 밀리초를 보존하여 해당 형태를 따릅니다.

오프셋 적용 방법 - 시간과 분, 30분 및 45분 영역, 연중 변경되는 오프셋을 더하거나 뺍니다.

고정 오프셋의 경우 산술은 간단합니다. UTC+09:00은 UTC보다 9시간 빠른 시계를 표시하고 UTC−05:00는 5시간 느린 시계를 표시합니다. 시간의 일부는 분으로 처리되므로 45분 오프셋은 정수 시간으로 반올림하여 안전하게 표시되지 않습니다. 기호는 표시된 로컬 판독값에 속합니다.

고정 오프셋은 여전히 ​​하나의 관측치입니다. ToolAcre는 Intl에게 브라우저의 현재 영역에서 선택한 순간에 적용할 수 있는 오프셋을 요청합니다. 오늘의 오프셋이 일년 내내 적용된다고 가정하지 않습니다. 따라서 하나의 오프셋을 애플리케이션 구성에 복사하면 테스트 중에 올바르게 나타날 수 있으며 환경의 적용 가능한 규칙이 변경되면 실패할 수 있습니다.

날짜도 변경되는 경우 — UTC와 지역적으로 다른 달력 날짜에 해당하는 자정 근처의 순간

시계 산술은 달력 경계를 넘을 수 있습니다. 00:20 UTC의 순간은 이전 날짜에 음수 오프셋으로 표시되고 나중에 같은 날짜는 양수 오프셋으로 표시됩니다. "14일"만 기록하는 티켓은 결과적으로 두 참가자 모두 자신의 달력을 정확하게 기억하더라도 UTC 로그의 다른 부분을 참조할 수 있습니다.

팀 간 이벤트를 처리할 때 전체 날짜, 시간 및 오프셋을 사용합니다. 변환기의 ISO 행은 날짜가 UTC에서 분리되는 것을 방지하는 반면 로컬 행은 친숙한 컨텍스트를 제공합니다. 사건이 자정에 걸쳐 발생하는 경우 여러 구역에 기록된 사람의 레이블을 정렬하는 대신 epoch 또는 UTC별로 항목을 정렬하세요.

작업 예: UTC의 1700000000, UTC+9 영역 및 UTC−5 영역 — 작성된 산술 및 날짜 비교

기존 게시된 단위 기사에서는 1,700,000,000초가 `2023-11-14T22:13:20.000Z`임을 설정합니다. 고정된 +09:00 읽기에서 9시간을 추가하여 2023-11-15 07:13:20를 얻습니다. 고정된 −05:00에서 5시간을 빼면 2023-11-14 17:13:20를 얻습니다. 날짜는 동부 예에서만 변경됩니다.

이 두 오프셋 수치는 산술적 시연이며 해당 날짜에 명명된 도시에 대한 주장이 아닙니다. ToolAcre 로컬 행은 실제 브라우저 영역에 대해 Intl이 제공하는 오프셋을 보고하도록 허용되어야 합니다. 이를 UTC 값과 비교하고 예시 값을 결과에 적용하는 대신 표시된 오프셋을 기록해 둡니다.

작업된 예: UTC의 한 에포크, 그 다음 두 개의 명시적인 고정 오프셋 판독값

두 판독값을 모두 표시하면 디버깅 세션에서 정신적인 뺄셈이 제거됩니다. 서버 팀은 UTC를 인용할 수 있고 문제를 재현하는 사람은 자신이 본 현지 시계를 인식할 수 있습니다. 두 행 모두 하나의 날짜에서 파생되므로 일치하는 초와 밀리초는 독립적으로 편집되거나 별도의 이벤트로 반올림되지 않았음을 증명합니다.

쌍은 스크린샷에 특히 유용합니다. 친숙한 로컬 값으로 자르는 대신 단위 메모와 ISO 행을 포함합니다. 크롭 시계는 여행 후 또는 구역 설정 변경 후 재해석될 수 있습니다. 시대와 ISO는 안정적으로 유지되며 로컬 렌더링은 안정적인 참조를 대체하지 않고도 사용자 경험을 설명합니다.

여기서 다루지 않는 내용 — 산술이 아닌 tz 데이터베이스에 있는 역사적 오프셋 변경 및 정치적 시간대 결정

단순 추가는 적용 가능한 오프셋이 다양한 지역 영역을 설명할 수 없습니다. 변환기는 로컬 형식을 Intl에 위임하지만 해당 저장소는 기본 규칙 테이블이나 기록 결정을 노출하지 않습니다. 따라서 이 기사에서는 과거 변경 사항을 나열하거나 미래 정책을 예측하거나 다른 데이터를 전달하는 엔진에서 동일한 출력을 약속하지 않습니다.

애플리케이션이 "09:00 in this place"를 예약해야 하는 경우 명명된 영역을 유지하고 영역 인식 예약 설계를 사용합니다. "이 요청이 지금 발생했습니다"라고 기록해야 할 경우 순간을 유지합니다. 이는 서로 다른 데이터 요구사항입니다. 고정된 `+02:00`는 판독을 생성한 지역 규칙을 식별하지 않고 한 순간에 판독을 설명할 수 있습니다.

고정 오프셋 산술은 변화하는 지역 규칙을 재현할 수 없습니다.

시대를 타임라인의 핀으로 생각하고 시계 화면을 그 주위에 배치된 라벨로 생각하세요. UTC는 공통 라벨을 제공합니다. 로컬 형식은 편리한 형식을 제공합니다. ToolAcre는 핀을 수정하지 않고 두 가지를 모두 제공하므로 시간 손실의 증거가 아닌 시간 차이가 예상됩니다.

분쟁이 있는 이벤트의 경우 원시 개수를 붙여넣고 단위를 명시적으로 명시한 후 ISO 출력을 공유하세요. 그런 다음 로컬 판독값을 주석으로만 첨부합니다. 이 순서는 "내 시계 대 당신의 시계"를 확인 가능한 매핑으로 바꾸고 날짜 경계 변경 사항이 다른 날의 이벤트로 가장하는 것을 방지합니다.