【问题标题】:Wrong daylight saving date when using TimeZoneInfo.ConvertTime? [closed]使用 TimeZoneInfo.ConvertTime 时夏令时日期错误? [关闭]
【发布时间】:2012-08-29 09:15:23
【问题描述】:

2011 年 11 月 6 日凌晨 2 点(美国东部标准时间,例如在纽约),根据daylight saving time schedule,现在是凌晨 3 点。

有人知道为什么 .NET 框架中的 TimeZoneInfo.ConvertTime 函数会返回以下内容:

var tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var f = "yyyy/MM/dd HH:mm:ss";
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 3, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/03 07:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 4, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/04 06:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 6, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/06 06:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 7, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/07 06:00:00"

好像时间变化发生在 11 月 4 日,这没有任何意义,因为它发生在 6 日。

编辑:哇,这个是我的。我在代码中使用了 2012 而不是 2011。

【问题讨论】:

  • 如果我们不必滚动查看代码,您的代码将会很多更容易阅读......(并且有一个名为“zone”的变量而不是比在每次通话中调用 FindSystemTimeZoneById 也会有所帮助...)

标签: c# .net time timezone dst


【解决方案1】:

看看你的描述:

2011 年 11 月 6 日

现在看看你的代码:

new DateTimeOffset(2012, 11, 3, 11, 0, 0, TimeSpan.Zero)

我想我们已经找到了问题所在。

查看daylight saving time schedule for 2012 显示了 2012 年 11 月 4 日发生的变化,正如 .NET 所说的那样。

当然,我仍然认为Noda Time 中的代码会更清晰,但我有偏见:)

【讨论】:

  • 哇。我认为这个错误在我的脑海中。我需要找一些Baygon。或者野田。
  • @ErwinMayer:由你决定。无论哪种方式,我都不会介意。
  • 我提交了删除它的请求,因为我自己还不能这样做。我不介意它是否保留(即使它可能会使一些寻找类似问题的人感到困惑)所以如果版主更愿意保留它,那很好。
  • @JonSkeet 我问了一个相关问题,你能检查一下吗:stackoverflow.com/questions/12506631/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 2020-09-24
  • 2012-12-21
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多