C# 如何正确解析日期时间字符串

C# 如何正确解析日期时间字符串,c#,parsing,datetime,datetimeoffset,C#,Parsing,Datetime,Datetimeoffset,我有输入日期时间字符串,如下所示:2015-01-28 17:55:43。问题是他们在UTC+8或其他班次。我需要将这些字符串正确解析并处理为UTC,而不考虑软件运行的时区。 我的问题是DateTime.Parse返回的是本地时间,而不是UTC时间,在解析字符串时,我看不到指定shift的方法。 我目前对此的解决方案如下所示: add.lastUpdateTime=new DateTimeDateTime.Parsetext-new TimeSpan0,8,0,0.Ticks,DateTimeK

我有输入日期时间字符串,如下所示:2015-01-28 17:55:43。问题是他们在UTC+8或其他班次。我需要将这些字符串正确解析并处理为UTC,而不考虑软件运行的时区。 我的问题是DateTime.Parse返回的是本地时间,而不是UTC时间,在解析字符串时,我看不到指定shift的方法。 我目前对此的解决方案如下所示:

add.lastUpdateTime=new DateTimeDateTime.Parsetext-new TimeSpan0,8,0,0.Ticks,DateTimeKind.Utc

这很难看,我不确定它在所有情况下都能正常工作


有更好的方法吗?

如果您有本地时间和偏移量,我建议用DateTimeOffset表示。因此:

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


或者,您可以使用表示OffsetDateTime中相同信息的。您可以使用LocalDateTimePattern将值解析为LocalDateTime,然后使用WithOffset方法将其转换为适当的OffsetDateTime。

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

Console.WriteLine(DateTime.Now.ToString("o"));
查看该格式,并将其用作模板,用于修补即将出现的字符串时间。有关更可行的字符串选项,请参阅。。。我敢打赌,一些变体会对你有用,例如,使用一种在末尾有zzz的格式,它将生成本地时间的UTC偏移量,例如,HH:mm:ss.ffffzzz,如链接页面所示


再看看例子中。。。请注意字符串2008-09-15T09:30:41.7752486-07:00,其中UTC偏移量为-7 America/Denver,表示解析有效。

add.LastUpdateTime=DateTime.Parsetext.AddHours-8?@AlexAnderson这将生成本地时间,而不是UTC时间问题在于解析,是吗?@MatthewHaugen它们是同一枚硬币的两面:DateTime.ToString的任何格式化字符串输出都保证被接受为返回DateTime.Parse的有效输入。。。这意味着您可以使用所有DateTime.ToString选项来探索您希望时间的字符串表示形式的外观,以便它们成为有效的时间字符串。您在新的表达式构造函数调用中缺少名称部分偏移量。我或多或少地撤回了我的答案和+1@JonSkeet的。。。我们用我的日常工作,从来没有回头。
Console.WriteLine(DateTime.Now.ToString("o"));