데이터베이스의 각 주소에 대한 시간대 수집을 시작하려고합니다. 시간대를 저장하는 가장 좋은 방법은 무엇입니까? 기존 주소 레코드의 시간대를 얻는 방법은 무엇입니까?
Microsoft SQL Server, .net mvc, C #을 사용하고 있습니다. 어떤 제안이라도 대단히 감사하겠습니다.
답변
항상 (또는 일년에 두 번) 변하지 않는 것을 저장하려고합니다. 표준 시간대 데이터베이스 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 는 정확히 옳습니다. 두 글자 만 저장하면됩니다.
이 데이터베이스에서 시간 오프셋 및 일광 절약 시간 제가 활성화 된 시간을 문의 할 수 있습니다. 시간 오프셋뿐만 아니라 영역도 제공하므로 동일한 위도의 많은 장소에 다른 코드가 있으며 시간대 규칙을 개별적으로 변경할 수 있으며 소프트웨어에서 처리 할 수 있습니다.
데이터베이스를 변경해야하는 유일한 시간은 위치가 속한 시간대가 변경 될 때 뿐이며 매우 드 rare니다.
답변
최상의 모범 사례는 TIMESTAMP WITH TIMEZONE
SQL99에 의해 정의 된 데이터 유형 을 지원하는 데이터베이스를 사용하는 것 입니다.
SQL Server에는 실제 시간대 저장을 제외한 datetimeoffset
모든 TIMESTAMP WITH TIMEZONE
작업을 수행 하는 유형 이 있습니다. UTC로부터 오프셋 (예 :)을 저장하기 만하면됩니다. 2013-05-04 12:34:56 -5:00
즉, 시간대를 기준으로 저장하기 전에이를 결정해야합니다.
답변
.Net framework 4.0 이상을 사용한다고 가정하면 TimeZoneInfo 가 필요합니다.
데이터베이스에 모든 날짜 값을 UTC 형식으로 저장하십시오. 각 클라이언트에 대해 ID 값 또는 ToSerializedString () 결과를 사용하여 저장된 날짜를 표시 할 로컬 형식으로 변환하는 TimeZoneInfo 오브젝트를 작성하십시오.