如何将 UTC 转换为澳大利亚东部夏令时间 (AEDT)?

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

我们正在从我们的贸易伙伴 API 下载数据。到目前为止,我们一直在使用 "E. Australia Standard Time" 并且运行良好。

夏令时开始后,我们的贸易伙伴说他们正在使用 "Australian Eastern Daylight Time (AEDT)"。

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

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)"

时出现以下错误
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 Eastern Standard Time"(对于堪培拉、霍巴特、墨尔本和悉尼)。尽管名称中有 "Standard" 一词,但它考虑了夏令时并在冬季使用 UTC+10,在夏季使用 UTC+11:

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. Australia Standard Time" 时区适用于布里斯班,他们在那里不遵守夏令时。

您可以在命令行中使用 TimeZoneInfo.GetSystemTimeZones() method, or by running tzutil /l 获取可用时区的完整列表。