在C#中将UTC日期字符串解析为日期

You*_*sef 3 c# string datetime parsing

简单的问题,我有这个字符串:

string dateString = "7/12/2014 4:42:00 PM";
Run Code Online (Sandbox Code Playgroud)

这是一个日期字符串,它位于UTC时区.

我需要将它转换为日期,所以我正在做以下事情:

DateTimeOffset dateOffset;

DateTimeOffset.TryParse(dateString, out dateOffset);

DateTime date = dateOffset.UtcDateTime;
Run Code Online (Sandbox Code Playgroud)

问题:

当我解析字符串到目前为止,代码正在考虑dateString位于PC的本地时区(+3 GMT),而不是UTC时区.

所以,我正在以下的dateOffset = {7/12/2014 4:42:00 PM +03:00},因而date = {7/12/2014 1:42:00 PM}

我怎么能告诉他提供的日期字符串是UTC格式而不是本地时区格式?

谢谢

Jon*_*eet 8

我怎么能告诉他提供的日期字符串是UTC格式而不是本地时区格式?

指定呼叫中的DateTimeStylesAssumeUniversal.这告诉解析代码该做什么.例如:

// null here means the thread's current culture - adjust it accordingly.
if (DateTimeOffset.TryParse(dateString, null, DateTimeStyles.AssumeUniversal,
                            out dateOffset))
{
    // Valid
}
Run Code Online (Sandbox Code Playgroud)

您应该始终使用结果TryParse来判断它是否已成功解析.

如果您了解格式和特定​​文化,我个人会使用DateTimeOffset.TryParseExact.(嗯,说实话,我会使用我的Noda Time项目开始,但这是另一回事.)

  • 哇,伟大的 Jon Skeet 回答了我的问题。这是一个遗愿清单条目完成!是时候关注我的下一个条目了:“绕月飞行”。感谢:D (2认同)