C# ConvertTimeFromUtc 的时髦之处

MB3*_*B34 6 c#

使用下面的代码,我尝试将此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 时间发送给我。

Max*_*viy 5

您必须添加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)

.net 小提琴