C#中的这个日期行为有什么问题?

时间:2010-04-15 14:35:58

标签: c# .net-3.5

如果我按如下方式输出格式化日期:

DateTime.Parse("2010-06-02T15:26:37.789 +01:00").ToString("HH:mm:sszzz")

我得到了预期的结果:

15:26:37+01:00

但是,如果我解析相同的日期,请转换为UTC并输出格式如下:

DateTime.Parse("2010-06-02T15:26:37.789 +01:00").ToUniversalTime().ToString("HH:mm:sszzz")

我明白了:

14:26:37+01:00

现在这两个日期,本地和UTC版本应该完全相同,但输出的文本代表两个不同的时间。

为什么会这样?

修改

为了澄清,我预计UTC的时间是14:26:37,因为DST元素被UTC删除了。我没想到它仍然有一个偏移量。上述两个时间不相同,而15:26:37 + 01:00 和14:26:37 + 00:00 是。

3 个答案:

答案 0 :(得分:6)

好的,现在回答:MSDN像这样解释“zzz”:

  

使用DateTime值,“zzz”   自定义格式说明符代表   签名偏移的本地操作   系统的UTC时区,测量   在几小时和几分钟。它不是   反映实例的价值   DateTime.Kind属性。为了这   原因,“zzz”格式说明符是   不建议与DateTime一起使用   值。

Empasis mine。 英语不是我的母语,但我读到“zzz”是机器的偏移量,根本与DateTime值无关。所以 - 是的,它会是一样的..

答案 1 :(得分:0)

您的区域设置的时区可能是UTC + 1。检查.ToUniversalTime()之后的结果,它应该是14:26(UTC + 1-1 = UTC)。

答案 2 :(得分:0)

六月正处于夏令时期。 UTC不会节省夏令时。

奇怪......或不。如果您将月份从6月更改为1月,那么它将是相同的!

正如我所说的夏令时!!!