如何正确解析DateTime字符串

Ars*_*ray 0 c# datetime parsing datetimeoffset

我有输入日期时间字符串,如下所示:2015-01-28 17:55:43.问题是它们处于UTC + 8(或其他一些转变).无论软件运行的时区如何,我都需要将这些字符串解析并正确处理为UTC.我的问题是DateTime.Parse返回本地时间,而不是UTC时间,并且在解析字符串时我没有看到指定shift的方法.我目前的解决方案看起来像这样:

add.LastUpdatedTime = new DateTime((DateTime.Parse(text) - new TimeSpan(0, 8, 0, 0)).Ticks,DateTimeKind.Utc);

这很丑陋,我不确定它在任何情况下都能很好地运作.

有没有更好的方法呢?

Jon*_*eet 7

鉴于你有一个当地时间和一个偏移,我建议代表DateTimeOffset.所以:

DateTime localTime = DateTime.ParseExact(...);
DateTimeOffset offsetTime = new DateTimeOffset(localTime, offset);
Run Code Online (Sandbox Code Playgroud)

然后您仍然知道当地时间,但您可以在需要时获得UTC等效值.基本上它保留了您拥有的所有信息.

作为替代方案,您可以使用代表相同信息的Noda TimeOffsetDateTime.您将使用a LocalDateTimePattern将值解析为a LocalDateTime,然后使用该WithOffset方法转换为适当的值OffsetDateTime.