datetimeoffset 値を datetime 値に変換すると、データが失われる可能性はありますか? MSDN ドキュメントから、datetimeoffset から datetime への変換は次のように言及されています。
DateTime プロパティは、DateTimeOffset から DateTime への変換を実行するために最もよく使用されます。ただし、Kind プロパティが指定されていない DateTime 値を返します。つまり、DateTime プロパティを使用すると、DateTimeOffset 値と UTC との関係に関する情報が変換によって失われます。
変換された DateTime 値が UTC 時間であることを示すために、DateTimeOffset.UtcDateTime プロパティの値を取得できます。次の 2 つの点で DateTime プロパティとは異なります。
Kind プロパティが Utc である DateTime 値を返します。Offset プロパティ値が 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 に変換しています。後で、datetime を datetimeoffset に戻す必要があります。
例として:
DateTime dt = ConvertFromDateTimeOffset(datetimeOffset);
DateTimeOffset dofsetnew = new DateTimeOffset(dt);
私の質問は、どのような状況でも datetimeOffset と dofsetnew が異なるかどうかです。もしそうなら、変換は損失データになります。