我输入的日期时间字符串如下所示: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);
这很丑陋,而且我不确定它在所有情况下都能正常运作。
有更好的方法吗?
答案 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偏移量,表示对解析有效。