我们正在从贸易伙伴的API下载数据。到目前为止,我们正在使用“ E. Australia标准时间”,并且运行良好。
夏令时开始后,我们的贸易伙伴说他们正在与“澳大利亚东部夏令时(AEDT)”合作。
我已经使用以下代码将UTC转换为“ E.澳大利亚标准时间”。
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)?
答案 0 :(得分:6)
您可能要使用“澳大利亚东部标准时间”(适用于堪培拉,霍巴特,墨尔本和悉尼)。尽管名称中带有“标准”一词,但这还是节省了夏令时的时间,冬季使用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标准时间”时区是布里斯班的时间,他们不遵守夏令时。
您可以使用TimeZoneInfo.GetSystemTimeZones()
方法或在命令行中运行tzutil /l
来获得可用时区的完整列表。