데이터베이스에 TimeZone을 저장하는 가장 좋은 방법은 무엇입니까?


13

데이터베이스의 각 주소에 대한 시간대 수집을 시작하려고합니다. 시간대를 저장하는 가장 좋은 방법은 무엇입니까? 기존 주소 레코드의 시간대를 얻는 방법은 무엇입니까?

Microsoft SQL Server, .net mvc, C #을 사용하고 있습니다. 어떤 제안이라도 대단히 감사하겠습니다.



일반적인 표준 시간대는 int를 사용하는 것이지만 일부 표준 시간대는 + 또는-30 분 또는 15 분이 될 수 있습니다.
Rocklan

2
@LachlanB를 넣는 한 가지 방법은 시간대가 시간 오프셋 보다 더 많은 위치에 있다는 것 입니다. 그러나 그 견해로는 그 자체로는 충분하지 않습니다. 예를 들어 러시아는 최근 일광 절약에 관한 정책을 변경했습니다. 이는 실제 날짜에 따라 다르게 취급해야한다는 것을 의미합니다.
Daniel B

답변:


7

항상 (또는 일년에 두 번) 변하지 않는 것을 저장하려고합니다. 표준 시간대 데이터베이스 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 는 정확히 옳습니다. 두 글자 만 저장하면됩니다.

이 데이터베이스에서 시간 오프셋 및 일광 절약 시간 제가 활성화 된 시간을 문의 할 수 있습니다. 시간 오프셋뿐만 아니라 영역도 제공하므로 동일한 위도의 많은 장소에 다른 코드가 있으며 시간대 규칙을 개별적으로 변경할 수 있으며 소프트웨어에서 처리 할 수 ​​있습니다.

데이터베이스를 변경해야하는 유일한 시간은 위치가 속한 시간대가 변경 될 때 뿐이며 매우 드 rare니다.


Wikipedia의 목록에는 모든 IANA 시간대에 대한 2 자 약어가 포함되어 있지 않으며 매핑이 명확하지 않습니다. 전체 기록 정보가 필요하면 전체 이름을 찾으십시오.
Hulk

2
Wikipedia 페이지에서 볼 수있는 유일한 두 문자 코드는 국가 코드입니다. 시간대를 고유하게 정의하지는 않습니다. 예를 들어 미국의 모든 표준 시간대에는 미국과 동일한 두 문자 국가 코드가 있습니다. 마찬가지로 호주 전역의 국가 코드는 AU입니다.
Ian

3

최상의 모범 사례는 TIMESTAMP WITH TIMEZONESQL99에 의해 정의 된 데이터 유형 을 지원하는 데이터베이스를 사용하는 것 입니다.

SQL Server에는 실제 시간대 저장을 제외한 datetimeoffset모든 TIMESTAMP WITH TIMEZONE작업을 수행 하는 유형 이 있습니다. UTC로부터 오프셋 (예 :)을 저장하기 만하면됩니다. 2013-05-04 12:34:56 -5:00즉, 시간대를 기준으로 저장하기 전에이를 결정해야합니다.


3

.Net framework 4.0 이상을 사용한다고 가정하면 TimeZoneInfo 가 필요합니다.

데이터베이스에 모든 날짜 값을 UTC 형식으로 저장하십시오. 각 클라이언트에 대해 ID 값 또는 ToSerializedString () 결과를 사용하여 저장된 날짜를 표시 할 로컬 형식으로 변환하는 TimeZoneInfo 오브젝트를 작성하십시오.


2

DB에 각 주소의 시간대를 저장하고 싶다고 말했지만 그와 관련하여 수행하려는 작업은 말하지 않았습니다. DB에 무언가를 저장하는 것은 그 자체로 끝이 아닙니다.

어쨌든 나는 직접 또는 TZ를 통합하는 기성품 소프트웨어 를 사용하여 TZ 데이터베이스 (일명 Olsen 데이터베이스)를 사용하려고합니다. 시간대를 문자열로 저장하여 TZ DB 항목 중 하나 ( 예 : '아프리카 / 캄팔라'또는 '유럽 / 파리')를 참조 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.