我将UTC时间转换为“E.南美标准时间”的错误时间

时间:2013-05-16 11:14:33

标签: .net c#-4.0 timezone

我创建了这个方法,将DateTime从UTC转换为另一个时区

public static DateTime GetDateTimeFromUtcTo(string timeZoneName, DateTime time)
{
    DateTime newDateTime = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);

    TimeZoneInfo newTzi = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);

    bool isDaylight = newTzi.IsDaylightSavingTime(time);

    TimeZoneInfo gmtTzi = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
    if (!gmtTzi.Equals(newTzi))
    {
        newDateTime = TimeZoneInfo.ConvertTime(newDateTime, gmtTzi, newTzi);
    }

    if (isDaylight)
    {
        newDateTime = newDateTime.AddHours(1);
    }

    return newDateTime;
}

timeZoneName =“E。南美标准时间”( - 03:00 GMT)和time =“16/05/2013 20:00:00时,此方法无法正常工作“(UTC时间)。

正确的日期时间必须是“16/05/2013 17:00:00”,但我得到“16/05/2013 16:00:00”。为什么呢?

1 个答案:

答案 0 :(得分:0)

你过分思考它。你只需要:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(time, tz);

您可以毫无问题地为"E. South America Standard Time"传递timeZoneName

您不需要先切换那种。 UtcUnspecified传入种类都可以使用。如果你传递Local种类,那么你做错了什么就会得到一个例外。请参阅the documentation

您也无需查找UTC / GMT,也无需手动检查DST。这一切都是在内部完成的。