C# DateTime 分析不一致

C# DateTime Parse inconsistency

提问人:Felix Arnold 提问时间:7/18/2018 更新时间:7/18/2018 访问量:176

问:

我有一个关于 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...) 我该如何防止这种情况发生?

C# 时区 日期时间格式 invariantculture

评论

0赞 Stevo 7/18/2018
这可能是一个时区问题。
2赞 Stevo 7/18/2018
在 ..ToUniversalTime()ToString
1赞 kiziu 7/18/2018
另一种选择是使用样式,例如。 在。要解决的一件事是格式,最后你应该用 K 表示种类,而不是 Z,除非你实际上假设日期时间只会是 UTC。DateTimeStyles.AdjustToUniversalParseExact()
0赞 Matt Johnson-Pint 7/19/2018
最好,会更好,因为地图很好。DateTimeStyles.RoundTripKindZDateTimeKind.Utc

答:

2赞 Neil 7/18/2018 #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 小时。

--

为了完全正确,您应该使用 .你混淆了问题,因为你包含一个尾随的 Z,它不是由格式化程序添加的,而只是复制到输出中。time.ToString("o");ToString