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)?
-
好吧,你的第一个有拼写错误。 Daylingh?当然,我不知道它是否会更好地正确。
-
您不能使用不存在的时区。时区不是指冬季或夏季时间。同一时区有规则可以控制冬季或夏季的偏移量。
-
为什么这样问?你用"E. Australia Standard Time"得错了吗?
-
@Panagiotis我想这与澳大利亚的某些地方有关,而不是夏令时(例如布里斯班)和其他地方(墨尔本)。 OP您可能想要提取此列表以找到正确的名称。
-
@PanagiotisKanavos"E.澳大利亚标准时间"工作正常。但我们的贸易伙伴处于"澳大利亚东部夏令时(AEDT)",即(UTC + 11:00)所以我们必须使用它。
-
@John也是时区规则的一部分。
-
@Yash不,你没有。没有这样的时区。时区E. Australia Standard Time。在夏季,它有一个偏移,在冬天它有另一个。从/向UTC转换时,使用这些时区规则检查实际日期并确定用于转换的偏移量。写一个简单的测试并传递两个不同的日期,一个在夏天,一个在冬天同一时间。检查转换后的时间
-
@PanagiotisKanavos这个时区就在那里。请查看以下链接:australia.gov.au/about-australia/facts-and-figures/…并滚动到上一节"夏令时"
-
@Yash这不是Windows时区。你混淆了不同的事情。 Windows时区名称列表在这里
-
@Panagiotis我的意思是OP可能使用了错误的时区名称,因为规则似乎有点复杂(冬天所有澳大利亚东部地区都使用标准,但是在夏天,布里斯班保留标准时间,而其他地方则转向日光保存)。
-
@Yash btw如果你真的关心时区使用NodaTime库和IANA时区名称。 Australia/Melbourne比Windows时区名称更清晰。 IANA时区数据库和名称已成为事实上的标准
-
按照以下链接的接受答案:从PST到UTC到AEST的TimeZoneInfo.ConvertTime
您可能想要使用"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来获取可用时区的完整列表。
-
这是一个很好的例子,为什么人们应该使用NodaTime和IANA时区名称!
-
非常感谢你,我想我得到了答案。 我还有一个问题。 一旦完成一天的节能.."AUS东部标准时间"会给我标准时差(UTC + 10:00)吗?
-
@Yash正如Panagiotis所说,规则内置于TimeZoneInfo(检查对象的属性)。
-
@Yash是的。 时区包括定义时钟向前和向后设置的规则。 它将使用适当的标准或夏令时偏移量来转换您的日期和时间。