【问题标题】:Incorrect DST start for Brazil in 20172017 年巴西的夏令时开始不正确
【发布时间】:2015-03-20 22:10:32
【问题描述】:

2017 年 DST 在巴西于 10 月 15 日 00:00:00(午夜)开始 - details

当我在 Windows 中更改为巴西时区并将日期更改为 2017 年 10 月 15 日之前的几天时,我看到系统正确显示 DST 开始日期(显示 DST 将于 10 月 15 日开始的信息)。

问题是,当我尝试从代码中获取 DST 开始日期时,它会返回 10 月 22 日。我使用 c++ mktime 和 c# TimeZone.GetDaylightChanges 都试过了。

这里是c#代码:

Console.WriteLine(TimeZone.CurrentTimeZone.GetDaylightChanges(2017).Start.ToString());

结果是:

10/21/2017 11:59:59 PM

知道为什么吗?

【问题讨论】:

  • TimeZone 可能不适合使用。请参阅GetDaylightChanges 中给调用者的说明:由于 TimeZone 类仅支持一个夏令时调整规则,因此 GetDaylightChanges 方法将当前调整规则应用于任何一年,而不管调整规则是否实际适用于该年份。当您使用TimeZoneInfo 时会发生什么?
  • TimeZoneInfo 工作正常。谢谢。

标签: c# c++ dst


【解决方案1】:

TimeZone 类只支持一次调整,可能会出错,见https://msdn.microsoft.com/en-us/library/system.timezone.getdaylightchanges(v=vs.110).aspx

它是它推荐的来电者注意事项

使用 TimeZoneInfo.GetAdjustmentRules 方法返回的 TimeZoneInfo.AdjustmentRule 对象数组可以获得更准确的结果。 Start、End 和 Delta 属性对应于 TimeZoneInfo.AdjustmentRule.DateStart、TimeZoneInfo.AdjustmentRule.DateEnd 和 TimeZoneInfo.AdjustmentRule.DaylightDelta 属性。

【讨论】:

  • 谢谢,没注意这句话。仍然奇怪的是 GetDaylightChanges 没有考虑来自系统的动态 DST 设置(只有在我们确定它不会在具有动态 DST 更改的系统中使用时,我们才可以信任它)。我假设 mktime 的工作方式相同。
猜你喜欢
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 2019-06-16
  • 2020-08-16
  • 1970-01-01
  • 2019-03-26
相关资源
最近更新 更多