当我将 datetimeoffset 值转换为 datetime 值时,是否有可能丢失数据。从 MSDN 文档中,提到了从 datetimeoffset 到 datetime 的转换,如下所示:
DateTime 属性最常用于执行 DateTimeOffset 到 DateTime 的转换。但是,它返回一个 DateTime 值,其 Kind 属性是未指定的。这意味着在使用 DateTime 属性时,任何有关 DateTimeOffset 值与 UTC 关系的信息都会因转换而丢失。
要指示转换后的 DateTime 值是 UTC 时间,您可以检索 DateTimeOffset.UtcDateTime 属性的值。它在两个方面与 DateTime 属性不同:
它返回一个 DateTime 值,其 Kind 属性为 Utc。如果 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 dt = ConvertFromDateTimeOffset(datetimeOffset);
DateTimeOffset dofsetnew = new DateTimeOffset(dt);
我的问题是在任何情况下 datetimeOffset 和 dofsetnew 是否不同?如果是这样,那么转换将是丢失数据。