无法在 C# 中解析(几乎)RoundtripKind 日期

Trouble parsing (almost) RoundtripKind date in C#

我正在使用一个 Java 客户端,它 returns 我有一个像 2016-09-02T16:18:54.000 UTC 这样的约会对象。注意结尾,这不是完全标准的格式。

如果我trim "UTC" 我可以成功解析日期:

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

但结果的种类是未指定的,而不是 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"如何解析:甚至我认为在我的第二个代码片段中隐式使用的 "o" 格式似乎也不起作用:

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

如果您的输入类似于 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);