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

C# 在C中解析UTC日期字符串到日期#,c#,string,parsing,datetime,C#,String,Parsing,Datetime,简单的问题,我有这个字符串: string dateString = "7/12/2014 4:42:00 PM"; 这是一个日期字符串,位于UTC时区 我需要将其转换为日期,因此我将执行以下操作: DateTimeOffset dateOffset; DateTimeOffset.TryParse(dateString, out dateOffset); DateTime date = dateOffset.UtcDateTime; 问题是: 当我分析到date的字符串时,代码考虑到d

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

string dateString = "7/12/2014 4:42:00 PM";
这是一个日期字符串,位于UTC时区

我需要将其转换为日期,因此我将执行以下操作:

DateTimeOffset dateOffset;

DateTimeOffset.TryParse(dateString, out dateOffset);

DateTime date = dateOffset.UtcDateTime;
问题是:

当我分析到date的字符串时,代码考虑到dateString位于PC的本地时区(+3 GMT),而不是UTC时区

因此,我得到以下
dateOffset={7/12/2014 4:42:00 PM+03:00}
因此
date={7/12/2014 1:42:00 PM}

我如何告诉他提供的日期字符串是UTC格式而不是本地时区格式

谢谢

我如何告诉他提供的日期字符串是UTC格式而不是本地时区格式

在调用中指定值
AssumeUniversal
。这告诉解析代码要做什么。例如:

// null here means the thread's current culture - adjust it accordingly.
if (DateTimeOffset.TryParse(dateString, null, DateTimeStyles.AssumeUniversal,
                            out dateOffset))
{
    // Valid
}
您应该始终使用
TryParse
的结果来判断它是否已成功解析


如果您知道格式和特定区域性,我个人会使用
DateTimeOffset.TryParseExact
。(嗯,老实说,我会用我的项目开始,但那是另一回事。)

还有一个超负荷的

这允许您指定。
datetimestyle
之一是
AssumeUniversal
,这正是您要寻找的:

如果在解析的字符串中未指定时区,则该字符串为 假定表示UTC。此值不能与AssumeLocal或AssumeLocal一起使用 圆滑的


我不知道.Net API是如何提供的,但我想您可能可以在解析之前使用格式来指示UTC时区,即首先将
7/12/2014 4:42:00 PM
翻译成
2014-07-02T16:42:00Z
,然后使用DateTimeOffset尝试解析哇,伟大的Jon Skeet回答了我的问题。这是一个桶列表条目完成!是时候关注我的下一个条目了:“绕月飞行”。谢谢:D
DateTimeOffset.TryParse Method (String, IFormatProvider, DateTimeStyles, DateTimeOffset)