【发布时间】:2016-07-22 21:26:58
【问题描述】:
将 UTC 中的 DateTime 转换为 DateTimeOffset 时出错 当种类是UTC时。 origDateTime 来自网络服务,因此我无法控制内容或格式。 在大多数情况下,它带有 Kind=Unspecified (即使是艰难的时间在 Utc 中)然后它就可以工作,但在极少数情况下 Kind=Utc 然后转换为 DateTimeOffset 抛出异常: "Utc DateTime 实例的 UTC 偏移量必须为 0。\r\n参数名称: 偏移量" 我该如何解决?
try {
//cause error !!!!
DateTime databaseUtcTime = DateTime.Parse("4/2/2016 6:25:20 PM");
var localTimeTemp = databaseUtcTime.ToLocalTime();
DateTime origDateTime = localTimeTemp.ToUniversalTime();
//this is working
//DateTime origDateTime = DateTime.Parse("4/2/2016 6:25:20 PM");
string timeZoneName = "Pacific Standard Time";
TimeZoneInfo localTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
DateTimeOffset localTime = new DateTimeOffset(origDateTime, localTimeZone.GetUtcOffset(origDateTime));
return localTime;
}
catch (Exception ex) {
string msg = ex.Message;
return null;
}
【问题讨论】:
-
DataTime Parse 使用时区设置自动转换为 UTC 时间,因此无需转换。与数据库的连接也会自动使用 UTC 时间,因此您的代码没有多大意义。仅当输入在另一个时区收集的数据或要在另一个时区显示时间时才使用时区偏移量。 Net库函数将时间以UTC数字形式存储在计算机中,并在输入或输出时自动转换为UTC。
-
我需要使用不同的时区(根据另一个字段)将每个日期时间转换为日期时间偏移量,以便能够在不同的时区显示。泽维尔的回答解决了这个问题。谢谢。
标签: c# datetime timezone datetimeoffset