【发布时间】:2018-10-24 09:21:16
【问题描述】:
我有一个非常简单的任务,TimeZoneInfo.ConvertTime() 给出的结果不正确。我只是想在“Cen.Australia Standard Time”区域中找到当前的日期时间:
string timeZone = "Cen. Australia Standard Time";
TimeZoneInfo zoneID = TimeZoneInfo.FindSystemTimeZoneById(timeZone);
DateTime nowAtTimeZone = TimeZoneInfo.ConvertTime(DateTime.UtcNow, zoneID);
// result: 24/10/2018 7:43:29 PM
// actual ACST time: 24/10/2018 6:43:29 PM (this is what I want)
// actual ACDT time: 24/10/2018 7:43:29 PM (this is not what I want)
我从这里得到了实际的 ACST 时间:https://www.timeanddate.com/time/zones/acst
以及从这里开始的实际 ACDT 时间:https://www.timeanddate.com/time/zones/acdt
请注意,将 TimeZoneInfo.ConvertTime() 替换为 TimeZoneInfo.ConvertTimeFromUtc() 会得到相同的结果。
请注意,时区是由客户输入的,这是我掌握的所有信息。他们不记录城市。
TimeZoneInfo.ConvertTime() 的结果似乎给了 ACDT 时间,尽管我已经指定了 ACST。
问题可能是TimeZoneInfo.ConvertTime() 正在对 ACST 应用夏令时,而实际上不应该这样做?如果是这样,我该如何防止它这样做?
【问题讨论】:
-
您的代码对于使用 DST 的阿德莱德来说是正确的。你的意思是达尔文(不是)?
-
达尔文是
"AUS Central Standard Time"。 (是的,命名很糟糕) -
阿德莱德不使用 ACST - 它使用 ACDT。至少谷歌告诉我。
-
阿德莱德在 ACST 和 ACDT 之间交替。参考这里:timeanddate.com/time/zone/australia/adelaide。达尔文全年都在 ACST:timeanddate.com/time/zone/australia/darwin
-
我不喜欢在阿德莱德度过的时光。我已经过了 ACST 时间。