簡體   English   中英

DateTimeOffset到DateTime轉換 - 數據丟失

[英]DateTimeOffset to DateTime conversion - Data Loss

當我將datetimeoffset值轉換為datetime值時,是否有可能丟失數據。 從MSDN文檔中,提到從datetimeoffset到datetime的轉換如下:

DateTime屬性最常用於執行DateTimeOffset到DateTime轉換。 但是,它返回其Kind屬性為Unspecified的DateTime值。 這意味着當使用DateTime屬性時,轉換將丟失有關DateTimeOffset值與UTC的關系的任何信息。

若要指示轉換的DateTime值是UTC時間,您可以檢索DateTimeOffset.UtcDateTime屬性的值。 它與DateTime屬性有兩點不同:

它返回一個Date屬性值,其Kind屬性為Utc。 如果Offset屬性值不等於TimeSpan.Zero,則會將時間轉換為UTC。

我看到以下方法將datetime offset轉換為datetime:

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。 稍后我們要將datetime轉換回datetimeoffset。

舉個例子:

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

我的問題是在任何情況下datetimeOffset和dofsetnew是否不同? 如果是,則轉換將是損失數據。

它的編寫方式 - 是的,任何時候輸入DateTimeOffset都是UTC偏移量,它是0以外的任何值和你的本地時區(最后'其他'條件)。 恕我直言,你最好總是使用UtcDateTime,假設那里涉及的潛在時區轉換是可以接受的。

此外,如果您當地的時區遵守夏令時,那么每年的模糊時間都會有損失,因為您不知道它代表哪一個。

如果您需要確保沒有丟失,請不要轉換為DateTime並保持DateTimeOffset(sql server type'datetimeoffset'),或者如果必須,將UTC偏移保持為您傳遞的單獨值,這樣您然后可以使用2個值(DateTime和offset)重建DateTimeOffset。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM