知道这是多年后的答案,但今天遇到了这个问题,一旦我解决了我的问题,就想添加一些我在其他答案中没有看到的上下文。
回到 OPs 代码片段,它没有执行 OP 预期的将 UTC 时间字符串存储为 UTCDateTime
的原因是因为DateTimeStyles.AssumeUniversal
唯一指定输入字符串是 UTC 字符串。默认情况下,C# 会将DateTime
's 创建为DateTimeKind.Local
. 在另一个答案中指出了这一点。这意味着时间从 UTC 转换为本地时间。
为确保您的最终结果是 UTC DateTime
,您需要使用DateTimeStyles
of DateTimeStyles.AdjustToUniversal
。其他答案中也提到了这一点。但是,如果您的输入字符串没有明显的时区,则可能会假定它是本地的,然后从本地转换为 UTC。
幸运的是 DateTimeStyles 实际上是一个标志枚举,这意味着我们可以同时使用上述两个选项。例如:
DateTime testDate = DateTime.ParseExact("2012-08-10T00:51:14.146Z", "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);