2012-07-12 3 views
0

이것은 C# 형식입니다어떻게 SQL Server DateTime 필드에 DateTimeOffset을 저장합니까?

저는 RSS 피드에서 데이터를 소비하고 우리 데이터베이스에 데이터를 저장하려고합니다. 내가 가지고있는 문제는 LastUpdateTime을 저장하는 방법입니다.

XmlReader reader = XmlReader.Create(uri); 
SyndicationFeed rssFeed = SyndicationFeed.Load(reader); 

var lastUpdate = rssFeed.LastUpdatedTime; 

문제는 rssFeed.LastUpdateTime이 DateTimeOffset입니다. 그러나 DateTime 만있는 SQL Server 2005를 사용하고 있습니다. 이 시나리오를 처리하는 가장 좋은 방법은 무엇입니까? 문제가 발생하면 모든 데이터베이스와 서버는 동부 표준시에 있습니다.

감사합니다.

답변

2

rssFeed.LastUpdateTime.UtcDateTime을 사용하여 DateTimeOffset을 UTC DateTime으로 변환 한 다음이 데이터를 DateTime 필드의 데이터베이스에 저장하는 것이 가장 간단합니다.

오프셋 저장에 신경 쓸 필요가 없습니다. Offset은 DateTime 값을 어떤 시간대와도 관련시키지 않습니다.

그런 다음 .NET의 기본 제공 TimeZoneInfo 클래스를 사용하여 UTC DateTime 값을 모든 표준 시간대로 변환 할 수 있습니다. TimeZoneInfo 클래스의 장점은 일광 절약 시간제의 DateTime 값도 조정한다는 것입니다.

성능 및 저장 측면에서 최상의 솔루션이기도합니다.

1

나는 일반적으로,

[LastUpdateOffset] SMALLINT NOT NULL 

같은 것을 추가 열이 있고 지정된 행 오프셋을 저장하는 것을 사용한다. 그런 다음 클라이언트 용으로 변환하십시오.

/// <summary> 
/// Convert a given UTC DateTime value into its localized value from given offset 
/// </summary> 
/// <param name="column">DateTime value, such as CreatedOn, UpdatedOn etc</param> 
/// <param name="offset">-60 is DST for example</param> 
private void ConvertUTCToClientTimeZone(DateTime column, int offset) 
{ 
    TimeSpan offsetTimeSpan = new TimeSpan(0, offset, 0).Negate(); 
    DateTimeOffset newDate = new DateTimeOffset(column, offsetTimeSpan); 
    column = newDate.DateTime; 
} 

희망이 있습니다. :)

+0

좋아요, 데이터베이스에 저장하려면 UTC 시간을 저장 하시겠습니까? DateTime과 같은 것 dbDateTime = rssFeed.LastUpdateTime.UtcDateTime – John

+0

예제에서 offset 매개 변수는 int로 정의됩니다. int 값을 사용하여 정의 할 수없는 UTC 오프셋이있는 국가에는 여러 국가와 지역이 있습니다. 예를 들어, 인도와 스리랑카의 UTC와의 시간차는 +05 : 30입니다. 이는 예상보다 일반적인 것입니다. 종종 현지 시간에 대한 UTC 오프셋의 결정은 정치에 기반합니다. 정치가의 변덕에 맡겨지면 UTC 상쇄가 반드시 예측 가능하지는 않습니다. –

관련 문제