无法使用DateTime.ParseExact()在C#中将DateTime字符串转换为DateTime

无法使用DateTime.ParseExact()在C#中将DateTime字符串转换为DateTime,c#,.net,datetime,C#,.net,Datetime,因此,我想转换一个特定的UTC日期时间字符串,其格式如下2020-04-18T20:05:00.000-04:00 我正在尝试使用以下功能: DateTime.ParseExact(segment.DepartureDate,"yyyy-MM-ddTHH:mm:ss.fffzzz", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal);

因此,我想转换一个特定的UTC日期时间字符串,其格式如下2020-04-18T20:05:00.000-04:00

我正在尝试使用以下功能:

DateTime.ParseExact(segment.DepartureDate,"yyyy-MM-ddTHH:mm:ss.fffzzz", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal);
用于将我从API收到的上述日期字符串转换为C#DateTime类型变量

但实际结果是{19-04-2020 00:05:00}。不知何故,日期被舍入或转换,这不是我所期望的

我也尝试过Date.Parse,但这会过滤掉我真正需要的UTC偏移量


任何人都可以建议一种合法的方法来准确地实现此转换。提前感谢。

如果您使用不同的时区(偏移量不等于当前区域设置的偏移量),并且偏移量很重要,通常最好使用
DateTimeOffset
而不是
DateTime
。DateTime只有一个将其标识为UTC或(系统)本地的属性,但是
DateTimeOffset
存储完整的偏移值

四舍五入?它的预期值AdjustToUniversal-日期和时间作为协调世界时(UTC)返回。。。时间在-4区,因此UTC必须添加4小时。。。(20:05+4h=00:05第二天)这是结果,所以。。。问题出在哪里?请注意,
DateTime
没有UTC偏移量值,在解析操作后丢失该值太正常了。这就是为什么最好改为解析为
DateTimeOffset
。请查看,它展示了如何使用TryParseExact将任何字符串转换为DateTime。使用那里的扩展方法,例如
dtStr.ToDate(“yyyy-MM-ddTHH:MM:ss.fffzzz”)
并检查它是否适用于您。感谢@SonerGönül提供的帮助。@jdweng:该评论在许多地方都非常混乱和不准确。例如:“当转换为字符串时,机器的时区用作默认值”这不是真的。该值将转换为当前区域性的默认日历系统,但不执行时区转换。例如,如果您的
DateTime
具有
Kind
UTC,则将其转换为字符串(默认情况下)将打印UTC值。如果类型为
未指定
本地
,则某些格式字符串将转换为UTC;我认为任何格式都不会转换为本地时区。