如果夏令时有效,并且日期对象已保存到数据库(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/