我有一个字符串格式的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的原因,它不适用于脚本中的日期。我应该如何更改日期模式?我试过很多,但都没解决。
您的代码有三个问题:
- 格式字符串区分大小写(yyyy表示4位数的年份,yyyy不表示,同样dd表示2位数的日期,而dd不表示(
.sss
应该是.fff
,持续毫秒- 你期待Z(祖鲁语(,但实际上你得到了一个时间偏移("+02:00"(。这意味着格式字符串与日期时间字符串不同
我建议您不要为ISO8601日期时间使用DateTime.ParseExact
,只需使用DateTimeOffset
的Parse
(它将遵循时间偏移并与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());