ConvertTimeFromUtc()和ToUniversalTime()是否处理​​DST?

时间:2014-04-18 16:18:24

标签: c# timezone dst

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

您可以使用此方法执行此操作:

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格式来将日期对象保存到数据库时的相同问题。

1 个答案:

答案 0 :(得分:19)

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

来自the MSDN documentation

  

执行转化时,ConvertTimeFromUtc方法会应用destinationTimeZone时区内有效的所有调整规则。

您应该尝试在转换中添加额外的小时。这会给你一个不正确的翻译。

关于DateTime.ToUniversalTime,它确实考虑了DST,但要小心这种方法。它假定输入值位于计算机的本地时区。如果您只需要使用DateTimeKind.Utc进行标记,请改用DateTime.SpecifyKind