将其转换为日期时间格式C#

use*_*174 2 c# xml twitter datetime

好的,所以我正在尝试阅读Twitter提要XML的日期/时间,它目前采用以下格式:Fri May 03 15:22:09 +0000 2013但是我的C#并没有将其作为日期/时间类型读取.

这就是我得到的:

  ArticleDate = DateTime.Parse(d.Element("created_at").Value)
Run Code Online (Sandbox Code Playgroud)

created_at包含:Fri May 03 15:22:09 +0000 2013格式

Mat*_*int 6

小心.您获得的时间是UTC.您最终可能会无意中让您的本地时区影响结果.

例如,其他一个答案建议使用此代码:

DateTime dt = DateTime.ParseExact("Fri May 03 15:22:09 +0000 2013",
                                  "ddd MMM dd HH:mm:ss zzz yyyy",
                                  CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

我在亚利桑那州(UTC-7)的计算机上的结果是:

5/3/2013 8:22:09 AM   (dt.Kind == DateTimeKinds.Local)
Run Code Online (Sandbox Code Playgroud)

虽然这是我当地时间的正确时刻,但这并不是给我的,除非密切关注该.Kind物业,否则它可能不是你所期望的.

您可以改为执行以下操作:

DateTime dt = DateTime.ParseExact("Fri May 03 15:22:09 +0000 2013",
                                  "ddd MMM dd HH:mm:ss zzz yyyy",
                                  CultureInfo.InvariantCulture,
                                  DateTimeStyles.AdjustToUniversal);
Run Code Online (Sandbox Code Playgroud)

返回:

5/3/2013 3:22:09 PM   (dt.Kind == DateTimeKinds.Utc)
Run Code Online (Sandbox Code Playgroud)

哪个更符合你的开始.

现在,这假设从Twitter返回的值将始终为UTC.根据他们的FAQ,情况似乎就是这样.但有人可能会争辩说,既然我们得到了一个偏移量,那么使用所提供的偏移量可能更为正确.如果偏移量发生变化,我们不希望我们的代码中断.因此,使用DateTimeOffset该类更合适.

DateTimeOffset dto = DateTimeOffset.ParseExact("Fri May 03 15:22:09 +0000 2013",
                                               "ddd MMM dd HH:mm:ss zzz yyyy",
                                               CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

结果是:

5/3/2013 3:22:09 PM +00:00
Run Code Online (Sandbox Code Playgroud)