在ParseExact中,字符串未被识别为有效的DateTime(毫秒)



我有一个字符串格式的Date,我需要将其转换为DateTime,这是我的代码:

DateTime dt = DateTime.ParseExact("2018-04-09T09:27:07.247+02:00", "YYYY-MM-DDTHH:mm:ss.SSSZ", System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime();
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")).ToString());

它适用于日期:2020-08-27T000:00:00+02:00,但由于millis的原因,它不适用于脚本中的日期。我应该如何更改日期模式?我试过很多,但都没解决。

您的代码有三个问题:

  1. 格式字符串区分大小写(yyyy表示4位数的年份,yyyy不表示,同样dd表示2位数的日期,而dd不表示(
  2. .sss应该是.fff,持续毫秒
  3. 你期待Z(祖鲁语(,但实际上你得到了一个时间偏移("+02:00"(。这意味着格式字符串与日期时间字符串不同

我建议您不要为ISO8601日期时间使用DateTime.ParseExact,只需使用DateTimeOffsetParse(它将遵循时间偏移并与ISO8601的日期时间一起使用(:

DateTimeOffset dt = DateTimeOffset.Parse("2018-04-09T09:27:07.247+02:00", System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime();
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt.DateTime, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")).ToString());

最新更新