GH GambleHub

시간대 및 감도

1) 기본 원칙

운송 및 보관으로 UTC. 모든 서버 타임 스탬프 및 정렬 키는 UTC에 있습니다. 가장자리 (가장자리/UI) 또는 특수 전용 형식 서비스에서 로컬 "벽" 시간으로 변환합니다.
영역 어 오프셋. '유럽/키예프' 는 'UTC + 02:00' 이 아닙니다. 규칙은 시간이 지남에 따라 변경됩니다. "+ 03:00" 이 아닌 사용자/객체 프로필에 IANA ID (tzdb) 를 저장하십시오.
시계 구분이 명확합니다.

벽 시계 (인간 시간, DST에 따름).
UTC 시계 (범용 규모).
단조로운 시계 (지속 시간 및 타임 아웃 측정 용). 벽 시계의 타임 아웃을 계산하지 마십시오.
시간 떨림에 대한 이념과 내성. 시스템은 작은 NTP/오프셋 점프에서 올바르게 생존해야합니다.


2) 데이터 모델 및 API 계약

이벤트: 'rused _ at' (UTC, RFC 3339), 'typle' (IANA), 선택적으로 'wall _ time' (생성시 오프셋이있는 로컬).
기간: UTC에서 반 닫힌 간격 '[시작, 끝)' 을 사용하십시오. 사람이 읽을 수있는 일정의 경우 원래 표현 + 영역을 유지하십시오.
중복 규칙: RRULE/cron 등가 + IANA 영역으로 직렬화됩니다. DST를 이해하는 엔진에 대한 대리인 계획.
API의 시간 형식: '2025-10-31T17: 00: 00Z' 와 같이 명시 적 'Z' 또는 오프셋이있는 ISO 8601/RFC 3339. 오프셋없이 플로팅 라인을 통과하지 마십시오.
Versioning: 시간 비즈니스 규칙 변경 (예: 국가를 일정한 UTC + 1로 전환) 은 일정의 구성 및 재 계산 마이그레이션입니다. 릴리스 스키마에서 고려하십시오.


3) 일광 절약 시간 (DST): 모호성 및 누락

복제 된 현지 시간. 가을에는 지역 "02:30" 이 두 번 발생할 수 있습니다. 이 구역의 플래너는 '2025-10-26T02: 30 + 03' 과 '2025-10-26T02: 30 + 02' 를 구분해야합니다.
현지 시간을 놓쳤다. 봄에는 분 간격 "점프" (예: '02: 00-03: 00' 은 존재하지 않음) 가 있습니다. 플래너는 전략을 결정해야합니다. '03:00' 으로 이동하거나 "가능한 빨리 건너 뛰거나 실행하십시오".
권장 사항: 작업을 "로컬 규칙 + 영역" 으로 저장하고 실제 인스턴스를 UTC에 미리 구체화하여 (롤링 창) DST에서 선택한 정책을 수정하십시오.


4) 도약 초 (시간 번짐)

두 번째 도약. UTC에 추가 초가 삽입되는 경우가 있습니다. 대부분의 비즈니스 프로세스는 23:59: 60을 "참조" 해서는 안됩니다.

스미어. 일부 환경에서는 점프를 피하기 위해 창 당 조정 (예:
  • 실습: 전체 클러스터 (NTP/smir) 에 대한 단일 시간 정책에 동의하고 메타 데이터에 로그인하여 런북에 보관하십시오.

5) 플래너와 크론 패턴

"간단한 크론의 위험. "클래식 크론은 DST 및 IANA 영역을 모릅니다. 일정이 영역 바운드 인 엔진을 사용하십시오 (Quartz 클래스, 클라우드 스케줄러 서비스, Kubernetes CronJob, 컨트롤러/관리를 통한 영역 포함).
재료 일정. 안정성을 위해 UTC (예: 7-30 일) 에서 다음 N 실행을 구체화하고 커서를 저장하고 DST에서 정책을 결정하십시오.
작업의 이념성. 중복 제거: '(job _ id, skeded _ at _ utc)'; 부작용을 복제해서는 안됩니다.
시계 미끄러짐. 긴 일시 정지/사고의 경우 캐치 업 또는 건너 뛰기 여부를 결정하십시오. 작업 당 설정.


6) 프로토콜 및 대기열 시간

이벤트 버스 (Kafka/Pulsar). '이벤트 _ time' 과 'ingest _ time' 을 별도로 저장하십시오. 소급 할당에 '이벤트 _ time' 을 사용하십시오.
이념적 인 소비자. 다시 제공 할 때는 배치의 오프셋이 아닌 이벤트 키와 '이벤트 _ time' 에 중점을 둡니다.
정렬 및 창. 특정 날짜에 대한 특정 구역의 로컬 규칙에서 얻은 UTC 간격으로 "24 시간 로컬 상점 시간" 창을 계산하십시오.


7) 로그, 흔적, 측정 항목

통합 시간대 표준: UTC의 모든 기술 로그 및 메트릭 ('Z' 표시). 대시 보드에 표시-사용자를 위해 현지화되었습니다.
추적 - 단조로운 시계에서 'trace _ star _ utc', 'chimes _ ms' 를 전달하십시오. "벽" 타임 스탬프를 빼지 마십시오.
비즈니스 보고서: 도메인 영역에서 "일" 을 형성하십시오 (예: UTC가 아닌 프랑스 세금의 '유럽/파리'). 명확하게 문서.


8) 사용자 프로필 및 컨텐츠

지정학: '선호하는 _ 시간대' (IANA), '선호하는 _ 로케일', '통화', '주 _ 시작' (Mon/Sun).
다중 영역 엔티티: 팀/조직의 경우 참가자의 개인 영역에 관계없이 "도메인 영역" (예: 상점/법인) 을 저장하십시오.
알림: 사용자 영역에서 "조용한 시간" 을 계산합니다. DST 보안과 함께 UTC 창에서 보내십시오.


9) 반 패턴

오프셋/영역없이 현지 시간 만 저장하십시오.
IANA 식별자 대신 하드 플래시 오프셋 '+ hh: mm'.
두 개의 "벽" 타임 스탬프의 차이를 통해 지속 시간을 계산하십시오.
영역/DST 지원없이 크론으로 계획하십시오.
표준에 로컬 영역이 필요한 UTC에서 "매일" 분석을 수행하십시오.
해당 지역의 규칙이 변하지 않는다고 가정합니다 (국가가 시간 정책을 변경 함).


10) 시간 테스트

통제 된 시간. 결정 론적 테스트를 위해 코드 (Clock/TimeProvider) 에 "클럭" 을 주입하십시오.

사례 세트:
  • 일광 절약 시간 (더빙/건너 뛰기) 변경.
  • (PHP 3 = 3.0.6, PHP 4)
  • tzdb의 규칙 변경 (기본 업데이트-회귀 테스트).
  • NTP 오프셋, 이벤트 제공 지연.
  • 퍼지 테스트. 랜덤 존, 날짜, 형식; 참조 라이브러리와 비교

11) 관찰 및 운영

경고: NTP의 잘못된 정렬, tzdb 업데이트 지연, "충족되지 않은" 크론 작업 버스트.
대시 보드: 구역 별 이벤트 배포/현지 일; 캐치 업/건너 뛰기 카운터.
런북: 관할권의 시간 규칙 변경 절차; tzdb 업데이트 주문은 일정 소유자와 통신합니다.


12) 구현 패턴

시간 정규화 게이트웨이. RFC 3339 UTC로 들어오는 시간을 정규화하는 미묘한 서비스는 영역 (IANA) 을 검증하고 컨텍스트를 보완합니다.
현지 건축업자. DST를 고려하여 "로컬 데이" 및 영역에서 정확한 UTC 경계 '[시작 _ utc, 끝 _ utc)' 를 구축하는 라이브러리/서비스.
스케줄 재료. "로컬 표현 + 영역" 으로 규칙을 저장하는 스케줄러는 UTC의 향후 인스턴스를 구체화하고 충돌/누락을 관리합니다.
듀얼 타임 스탬프 이벤트. 필드가 'arsed _ at _ utc', 'wall _ time _ local', 'typle' 인 이벤트. 로컬은 UI, UTC는 시스템으로 대체됩니다.


13) 건축가 점검표

1. UTC는 어디에나 저장됩니까

2. 엔터티에는 IANA 영역과 도메인 데이터 정책이 있습니까?
3. 스케줄러는 DST를 이해하고 UTC에서 인스턴스를 구체화합니까?
4. 통나무/지표-UTC; 도메인 영역에서보고?
5. 타임 아웃/후퇴-단조 시계에서?
6. tzdb 업데이트가 자동화되고 모니터링됩니까?

7. 테스트는 규칙 변경, 복식/누락 된 시간을 다룹니까


14) 미니 레시피 (의사 코드)

로컬 "업무" 를 UTC 간격으로 변환


function localDayToUtcInterval(dateLocal, tz):
startLocal = combine(dateLocal, 00:00) in tz endLocal  = startLocal + 1 day startUtc  = toUTC(startLocal) // учитывает DST endUtc   = toUTC(endLocal)
return [startUtc, endUtc)

반복 일정을 재활용합니다


inputs: rrule, tz, windowStartUtc, windowEndUtc for each localOccurrence in expand(rrule, tz, [windowStartUtc, windowEndUtc] projected to tz):
emit occurrence { scheduled_at_utc = toUTC(localOccurrence), tz }

Idempotent 작업 시작 키


dedupe_key = hash(job_id + scheduled_at_utc.toString())

15) 안전 및 준수

감사: 서버 연대기와 함께 사용자 주장 ("오후 11시 이전에 약속되었습니다") 을 조정하기 위해 시간 예측 (UTC 및 로컬) 을 유지하십시오.
규제: 보고 기간은 필요한 영역 (세금, 책임있는 게임 제한, 마케팅 제한 "시간별") 에서 구성됩니다.

개인 정보 보호: 시간대-개인 설정이지만 데이터를 정확하게 식별하지는 않 일반적인 개인 정보 보호 정책 내에


결론

"시간 민감도" 는 날짜 형식이 아니라 책임의 아키텍처 경계에 관한 것입니다. 저장 장소, 변환 장소, 계획 방법 및 정확성 입증 방법. UTC 통일, 명시 적 IANA 구역, 유능한 스케줄러, 이중 타임 스탬프 및 단조로운 시계는 사고원에서 예측 가능한 인프라 서비스로 시간을 전환합니다.


아키텍처 및 프로토콜 관련 기사 (권장):
  • 지오 DNS와 지오 라우팅; 하중 밸런싱; 시간이 지남에 따른 사건의 관찰 가능성 크론 패턴과 일정 구체화; 지역 제한 및 지역보고 일.
Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.