【问题标题】:Trouble parsing (almost) RoundtripKind date in C#在 C# 中解析(几乎)RoundtripKind 日期时遇到问题
【发布时间】:2016-09-05 13:52:17
【问题描述】:

我正在使用一个 Java 客户端,它返回一个像 2016-09-02T16:18:54.000 UTC 这样的日期。注意结尾,这不是标准格式。

如果我修剪“UTC”,我可以成功解析日期:

DateTime.Parse("2016-09-02T16:18:54.000")

但结果的 Kind 是未指定的,而不是 UTC(显然);我可以通过将“UTC”替换为“Z”来绕过它,如下所示:

DateTime.Parse("2016-09-02T16:18:54.000Z", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)

但理想情况下,我不想弄乱输入。

使用 TryParseExact 和不同的格式尝试了几次,但都失败了:

DateTime.TryParseExact("2016-09-02T16:18:54.000 UTC", new [] {
 "o",
 "yyyy-MM-dd hh:mm:ss:fff UTC",
 "yyyy-MM-ddhh:mm:ss:fff UTC",
 "yyyy-MM-ddThh:mm:ss:fff UTC"
}, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out startDate)

我很确定“UTC”关键字不是问题(因为others 已成功使用它),而是我似乎不知道如何解析的“T”:甚至不是“我认为在我的第二个代码 sn-p 中隐式使用的 o" 格式似乎有效:

DateTime.TryParseExact("2016-09-02T16:18:54.000Z", "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out startDate)

【问题讨论】:

    标签: c# date parsing datetime date-parsing


    【解决方案1】:

    如果您的输入类似于2016-09-02T16:18:54.000 UTC,这对我有用:

    DateTime.TryParseExact("2016-09-02T16:18:54.000 UTC", 
    "yyyy-MM-ddTHH:mm:ss.fff UTC"
    , CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out startDate);
    

    【讨论】:

    • @CodeCaster 根据 OP 问题,他的输入是 2016-09-02T16:18:54.000 UTC?
    • UTC 之前的空格不是问题,使用 HH 而不是 hh 修复了它,谢谢!
    • @Pikoh 玩过 DateTimeStyles,没能得到我想要的 DateTimeKind (Utc),不得不明确地使用 SpecifyKind
    猜你喜欢
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多