在c#中解析(几乎)RoundtripKind日期的问题

本文关键字:RoundtripKind 日期 问题 几乎 | 更新日期: 2023-09-27 18:05:54

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

如果我修剪"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"关键字不是问题(因为其他人已经成功地使用了它),而是我似乎不知道如何解析的"T":甚至我认为在第二个代码片段中隐式使用的"o"格式似乎也不起作用:

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

在c#中解析(几乎)RoundtripKind日期的问题

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