2012-06-05 84 views
6

當我將datetimeoffset值轉換爲日期時間值時,是否有任何數據丟失的可能性。 從MSDN文檔,從DATETIMEOFFSET到日期時間轉換被提及如下:DateTimeOffset到DateTime轉換 - 數據丟失

日期時間屬性是最常用的執行的DateTimeOffset 爲DateTime轉換。但是,它返回一個DateTime值,其 Kind屬性是Unspecified。這意味着在使用DateTime屬性時,有關 DateTimeOffset值與UTC的關係的任何信息將由 轉換丟失。

要指示轉換後的DateTime值是UTC時間,您可以檢索DateTimeOffset.UtcDateTime屬性的值。它與DateTime屬性有兩種區別:

它返回一個DateTime值,其Kind屬性爲Utc。 如果偏移屬性值不等於TimeSpan.Zero,它會將時間轉換爲UTC。

我看到下面的方法來轉換日期時間偏移日期時間:

static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime) 
{ 
    if (dateTime.Offset.Equals(TimeSpan.Zero)) 
     return dateTime.UtcDateTime; 
    else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))) 
     return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local); 
    else 
     return dateTime.DateTime; 
} 

現在在我們的系統,我們在上面的方式轉換DATETIMEOFFSET爲datetime。稍後我們要將日期時間轉換回datetimeoffset。

舉個例子:

DateTime dt = ConvertFromDateTimeOffset(datetimeOffset); 
DateTimeOffset dofsetnew = new DateTimeOffset(dt); 

我的問題是任何情況下DATETIMEOFFSET以及是否下dofsetnew有所不同呢?如果是這樣,那麼轉換將是損失數據。

回答

4

它的寫法 - 是的,任何時候輸入的DateTimeOffset都是UTC偏移量,它的值不是0,而是你的本地時區(最後一個'else'條件)。恕我直言,你最好總是使用UtcDateTime,假設涉及的潛在時區轉換是可以接受的。另外,如果你當地的時區觀察到DST,那麼在每年的模棱兩可的小時期間會有損失,因爲你不知道它代表了哪一個。

如果您需要確保沒有丟失,請不要轉換爲DateTime並保留DateTimeOffset(sql服務器類型'datetimeoffset'),或者必須將UTC偏移保留爲您傳遞的單獨值它,所以你可以使用2個值(日期時間和偏移量)重建DateTimeOffset。

相關問題