使用下面的代码,我尝试将此datetime字符串转换为本地字符串DateTime
private DateTime ConvertToLocalTime(string datetimestring)
{
DateTime timeUtc = DateTime.Parse(datetimestring);
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
return cstTime;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的异常:
在 System.TimeZoneInfo.ConvertTime(DateTime dateTime、TimeZoneInfo sourceTimeZone、TimeZoneInfo destinationTimeZone、TimeZoneInfoOptions 标志、CachedData cachedData)
System.TimeZoneInfo.ConvertTimeFromUtc(DateTime dateTime, TimeZoneInfo destinationTimeZone)由于提供的 DateTime 没有正确设置 Kind 属性,因此无法完成转换。例如,当 Kind 属性为 时
DateTimeKind.Local,源时区必须为 TimeZoneInfo.Local。
ConvertTimeFromUtc 的示例看起来与我的代码完全相同,只是我将此字符串解析为 timeUtc:
2017-01-23T05:00:00+00:00
如果我这样调用 Parse:
DateTime.Parse(datetimestring, null, System.Globalization.DateTimeStyles.RoundtripKind);
Run Code Online (Sandbox Code Playgroud)
timeUtc.Kind.ToString()返回“本地”
那么,我该如何补救呢?时间将以 UTC 时间发送给我。
您必须添加DateTime.SpecifyKind
private static DateTime ConvertToLocalTime(string datetimestring)
{
DateTime timeUtc = DateTime.Parse(datetimestring);
var dt = DateTime.SpecifyKind(timeUtc, DateTimeKind.Utc);
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(dt, cstZone);
return cstTime;
}
Run Code Online (Sandbox Code Playgroud)