【问题标题】:C# DateTime Parse inconsistencyC# DateTime 解析不一致
【发布时间】: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.AdjustToUniversalParseExact()。要解决的一件事是格式,最后你应该有 K 表示种类,而不是 Z,除非你实际上假设日期时间将只有 UTC。
  • 最好DateTimeStyles.RoundTripKind 会更好,因为Z 可以很好地映射到DateTimeKind.Utc

标签: c# datetime timezone datetime-format invariantculture


【解决方案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,它不是由格式化程序添加,而是复制到输出中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多