如何正确解析DateTime字符串

时间:2015-01-28 10:33:28

标签: c# parsing datetime datetimeoffset

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

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

这很丑陋,而且我不确定它在所有情况下都能正常运作。

有更好的方法吗?

2 个答案:

答案 0 :(得分:7)

鉴于您有本地时间和偏移量,我建议在DateTimeOffset中表示。所以:

DateTime localTime = DateTime.ParseExact(...);
DateTimeOffset offsetTime = new DateTimeOffset(localTime, offset);

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

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

答案 1 :(得分:0)

编写示例程序,并输出以下内容:

Console.WriteLine(DateTime.Now.ToString("o"));

查看该格式,并将其用作修补字符串时间的模板。对于更可行的字符串选项,请查看DateTime.ToString Method ...我会在那里打赌一些变体将为你工作(例如,在最后使用格式" zzz",这将生成本地时间的UTC偏移,例如," HH:mm:ss.ffffzzz& #34;如链接页面所示。​​

另请参阅示例中的DateTime.Parse Method ...注意字符串" 2008-09-15T09:30:41.7752486-07:00"包含-7(美国/丹佛)的UTC偏移量,表示对解析有效。