데이터베이스에 TimeZone을 저장하는 가장 좋은 방법은 무엇입니까? 시간대를 얻는 방법은 무엇입니까? Microsoft

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

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



답변

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

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

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


답변

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

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


답변

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

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


답변

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

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


답변