如果夏令时有效,并且日期对象已保存到数据库(UTC格式)中,您可以检索该日期对象以在 View (例如asp.net-mvc的 View )中显示它。

然后,您可以使用以下方法进行操作:

public static DateTime ConvertToLocalTimeFromUtcTime(DateTime utcDate, string timeZoneId)
{
    TimeZoneInfo localZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
    DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, localZone);

    if (localZone.IsDaylightSavingTime(localTime))
        localTime = localTime.AddHours(1); // is this needed !?

    return localTime;
}

问题是,TimeZoneInfo.ConvertTimeFromUtc()是否处理DST,还是您必须检查自己并为日期对象添加或减去X小时?

通过使用ToUniversalTime()将日期对象转换为UTC格式将日期对象持久保存到数据库时,存在相同的问题。

最佳答案

是的。只要您定位的时区使用夏令时,ConvertTimeFromUtc就会自动处理夏令时调整。

the MSDN documentation:



您不应尝试在转换中增加一个小时。那会给你不正确的翻译。

关于DateTime.ToUniversalTime,它确实考虑了DST,但是使用此方法时要小心。假定输入值在计算机的本地时区中。如果只需要使用DateTimeKind.Utc进行标记,则可以使用DateTime.SpecifyKind代替。

关于c# - ConvertTimeFromUtc()和ToUniversalTime()是否处理​​DST?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23158015/

10-10 09:33