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

Quo*_*ter 18 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;
}
Run Code Online (Sandbox Code Playgroud)

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

通过将日期对象转换为UTC格式来将日期对象持久化到数据库时的相同问题ToUniversalTime().

Mat*_*int 20

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

MSDN文档:

执行转换时,该ConvertTimeFromUtc方法应用destinationTimeZone时区中有效的任何调整规则.

你应该尝试在您的转换添加额外的一小时.这会给你一个错误的翻译.

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