关于c#:如何将UTC转换为澳大利亚东部夏令时(AEDT)?

How to convert UTC to Australian Eastern Daylight Time (AEDT)?

本问题已经有最佳答案,请猛点这里访问。

我们正在从贸易伙伴的API下载数据。 直到现在我们正在使用"E. Australia Standard Time"并且工作正常。

在夏令时开始后,我们的贸易伙伴表示他们正在使用"澳大利亚东部夏令时(AEDT)"。

我使用以下代码从UTC转换为"E. Australia Standard Time"。

1
2
3
DateTime utcTime = DateTime.UtcNow;
TimeZoneInfo objTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time");
DateTime TPDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, objTimeZoneInfo);

但是当我使用"E. Australia Daylight Time"或"Australian Eastern Daylight Time(AEDT)"时,我会听到以下错误

1
2
The time zone ID 'E. Australia Daylight Time' was not found on the local computer.
The time zone ID 'Australian Eastern Daylight Time (AEDT)' was not found on the local computer.

我应该将什么时区ID传递给FindSystemTimeZoneById()方法以正确转换为澳大利亚东部夏令时(AEDT)?


您可能想要使用"AUS东部标准时间"(适用于堪培拉,霍巴特,墨尔本和悉尼)。 尽管名称中包含"标准"一词,但这可以解释夏令时,冬季使用UTC + 10,夏季使用UTC + 11:

1
2
3
4
5
6
var tz = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");

TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2018,1,1,0,0,0,DateTimeKind.Utc), tz);
    // => 01/01/2018 11:00:00
TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2018,7,1,0,0,0,DateTimeKind.Utc), tz);
    // => 01/07/2018 10:00:00

"E.澳大利亚标准时间"时区适用于布里斯班,他们没有观察夏令时。

您可以使用TimeZoneInfo.GetSystemTimeZones()方法或在命令行运行tzutil /l来获取可用时区的完整列表。