首页 > 解决方案 > TimeZoneInfo.ConvertTimeFromUtc 返回错误的值

问题描述

我正在使用设定的日期/时间值并从 UTC 转换,但时区。我希望得到原始时间 - 5 是 EST 时区的正确时间,但它偏离了 1 小时,仅偏移了 4 小时。

string dateString = "3/15/2021 6:59 AM";
DateTime TimeDataDue = DateTime.Parse(dateString, System.Globalization.CultureInfo.InvariantCulture);

TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var TimeDataDueEastern = TimeZoneInfo.ConvertTimeFromUtc(TimeDataDue, easternZone).Dump();

我得到的输出是“3/15/2021 2:59:00 AM”,但我希望得到“3/15/2021 1:59:00 AM”

有什么建议么?

谢谢!

标签: c#.nettimezonedatetime-conversion

解决方案


正如 Yarik 在问题评论中所说,您获得的结果是正确的。

您可以在此处查看美国东部时区的 2021 年 DST 时间表: https ://www.timeanddate.com/time/zone/usa/new-york?year=2021

截图 1

截图 2

此外,您会注意到easternZone.DisplayName在您的代码中将是"(UTC-05:00) Eastern Time (US & Canada)" (假设是英语)。换句话说,尽管时区在其 中包含“标准”一词Id,但它适用于包括 EST 和 EDT 时段在内的全年。

由于 EDT 于 2021 年 3 月 15 日生效,因此您会得到比 UTC 晚 4 小时的结果。


推荐阅读