如果我按如下方式输出格式化日期:
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 是。
答案 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月,那么它将是相同的!
正如我所说的夏令时!!!