C# DateTime 解析不一致
Posted
技术标签:
【中文标题】C# DateTime 解析不一致【英文标题】:C# DateTime Parse inconsistency 【发布时间】:2018-12-26 04:37:43 【问题描述】:我有一个关于 DateTime 的问题 我的代码是:
DateTime.ParseExact("2018-06-13T12:05:55.7738391Z", "yyyy-MM-ddTHH:mm:ss.fffffffZ", System.Globalization.CultureInfo.InvariantCulture).ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")
结果是:
"2018-06-13T14:05:55.7738391Z"
为什么 DateTime 会增加 2 小时? (我试过 ...00:05:55 ...) 以及如何防止这种情况发生?
【问题讨论】:
可能是时区问题。 在ToString
之前尝试使用.ToUniversalTime()
。
其他选项是使用样式,例如。 DateTimeStyles.AdjustToUniversal
在ParseExact()
。要解决的一件事是格式,最后你应该有 K 表示种类,而不是 Z,除非你实际上假设日期时间将只有 UTC。
最好DateTimeStyles.RoundTripKind
会更好,因为Z
可以很好地映射到DateTimeKind.Utc
。
【参考方案1】:
我猜你的时区是 UTC+2。
var time = DateTime.ParseExact("2018-06-13T12:05:55.7738391Z", "yyyy-MM-ddTHH:mm:ss.fffffffZ", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(time.ToLocalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); // + 2 hours ?
Console.WriteLine(time.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); // +0 hours ?
你说的时间是UTC(Z=zulu时间=UTC+0),但是你电脑的时区是自动加2小时的。
--
为了完全正确,您应该使用time.ToString("o");
。你很困惑,因为你的 ToString
包含一个尾随 Z,它不是由格式化程序添加,而是复制到输出中。
【讨论】:
以上是关于C# DateTime 解析不一致的主要内容,如果未能解决你的问题,请参考以下文章
Python中时间格式的问题:models与form与mysql中的不一致。