如果夏令时生效,并且日期对象已保存到数据库中(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格式来将日期对象保存到数据库时的相同问题。
答案 0 :(得分:19)
是。只要您定位的时区使用夏令时,ConvertTimeFromUtc
就会自动处理夏令时调整。
执行转化时,
ConvertTimeFromUtc
方法会应用destinationTimeZone
时区内有效的所有调整规则。
您应该不尝试在转换中添加额外的小时。这会给你一个不正确的翻译。
关于DateTime.ToUniversalTime
,它确实考虑了DST,但要小心这种方法。它假定输入值位于计算机的本地时区。如果您只需要使用DateTimeKind.Utc
进行标记,请改用DateTime.SpecifyKind
。