문제

데이터베이스의 다른 세계 지역에 대한 여름 시간 (일광 절약 시간) 변경 규칙을 저장해야합니다. 나는 이미 지역과 하위 지역을 저장하는 방법이 있습니다 (그래서 전체 "호주의 절반"/애리조나/나바 호 문제는 처리됩니다) 그러나, 나는 이것을 달성하는 가장 효율적인 스키마가 무엇인지 궁금합니다. 내가 볼 수있는 두 가지 옵션 :

  • 매년 독특한 1 행을 포함하는 테이블과 지역의 시작 및 종료 시간과 특정 오프셋을 제공하는 테이블이 있습니다.
  • 각 지역의 공식 및 유효 날짜 범위를 저장하는 테이블이 있습니다 (이스라엘과 같은 지역에 필요한 유효 범위)

첫 번째의 장점은 말 그대로 유연성입니다. 아무것 가능합니다. 불행히도 (a) 더 많은 공간이 필요하고 (b) 데이터 입력을 얻기 위해 많은 작업이 필요합니다. 두 번째 행은 한 행이 수십 년 동안 한 지역에 해당 할 수 있기 때문에 좋습니다. 그러나 응용 프로그램 계층에서 일종의 언어 파서와 통역사가 필요합니다. 이 데이터베이스는 강력한 텍스트 처리 기능이없는 언어로 작성된 여러 가지 응용 프로그램에서 사용되므로 해당 경로를 피하려고합니다.

나는 단지 ZoneInfo 또는 그와 비슷한 것을 사용하고 싶지만 불행히도이 경우에는 옵션이 아닙니다. 마찬가지로 날짜, 시간대 및 여름 시간 정보를 정상화 할 수 없습니다. ~ 해야 하다 특정 사용 사례를 충족시키기 위해 데이터베이스에 있습니다.

아무도 비슷한 일을 한 경험이 있습니까? 마찬가지로, 내가 놓친 훌륭한 옵션이 있습니까?

도움이 되었습니까?

해결책

당신은 첫 번째 옵션에 거의 파멸됩니다. 시간 변경과 관련하여 "규칙"이있는 국가에 대해 원하는만큼 미리 출신 일 수는 있지만 일부 지역은 규칙이 없으며 독재적 피아트 또는 입법 투표에 의해 변경 사항이 제정됩니다 (브라질은 그 때까지 그렇게했습니다. 올해).

그렇기 때문에 모든 OS 공급 업체가 1 년에 한두 번 타임 존 파일 변경을 출시하는 이유입니다. 100% 정확한 파일을 프로그래밍 방식으로 생성 할 수 없기 때문에해야합니다.

다른 팁

DST 규칙이 데이터베이스에 있어야하는 경우 외부 권한 소스 (라이브러리, 웹 사이트 등)에서 자동으로 업데이트하도록 선택할 수 있습니다. DST 규칙을 수동으로 유지하는 것은 그다지 재미 있지 않습니다.

시간대 규칙에 대한 가장 좋은 정보 소스 중 하나는 OLSON 데이터베이스입니다. elsie.nci.nih.gov. 2008 년 9 월, 데이터의 현재 버전은 tzdata2008f.tar.gz였으며, 현재 버전의 코드는 tzcode2008e.tar.gz입니다 (예, 데이터가 항상 해제 된 것은 아닙니다). 이것은 다른 많은 시스템 (특히 Oracle 정보 포함)의 정보 소스 인 경향이 있습니다. 메일 링리스트도 있습니다. 보시다시피, 2008 년까지 지금까지 6 가지 버전의 데이터가있었습니다. 2005r, 2006L, 2007K의 사본이 내 컴퓨터에 숨어 있으므로 상황이 다소 자주 바뀔 수 있습니다.

요즘 (2017 년 3 월), Olson 데이터베이스는 IANA에서 구할 수 있습니다. https://iana.org/time- zones 그리고 ftp://ftp.iana.org/tz (특히 ftp://ftp.iana.org/tz/releases).

일반적인 로케일 데이터 저장소도 있습니다 cldr 시간대에 대한 정보도 있습니다.

Oracle DBMS가 자동으로이를 처리합니다. 날짜는 내부 표현에 저장되며 (인수를 위해 UMT를 상상하자) 문자열로 변환 될 때 시간대 규칙에 따라 형식화됩니다.

이것은 또한 시간이 지남에 따라 변화하는 동안 무엇을 해야하는지에 대한 논쟁을 해결합니다. 즉, 시계를 1/2 시간 뒤로 굴리면 실제로 같은 날 오전 3시 25 분의 2 인스턴스가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top