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

时间:2013-05-13 12:12:55

标签: c# xml datetime twitter

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

这就是我得到的:

  ArticleDate = DateTime.Parse(d.Element("created_at").Value)

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

5 个答案:

答案 0 :(得分:6)

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

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

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

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

5/3/2013 8:22:09 AM   (dt.Kind == DateTimeKinds.Local)

虽然这是我当地时间的正确时刻,但这并不是给我的,除非密切注意.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);

返回:

5/3/2013 3:22:09 PM   (dt.Kind == DateTimeKinds.Utc)

哪个更符合您的开始。

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

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

结果是:

5/3/2013 3:22:09 PM +00:00

答案 1 :(得分:2)

您应该使用DateTime的ParseExact来获取您的值

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

答案 2 :(得分:1)

使用DateTime.TryParseExact之类的:

if (DateTime.TryParseExact("Fri May 03 15:22:09 +0000 2013",
                                              "ddd MMMM dd HH:mm:ss zzz yyyy",
                                              CultureInfo.InvariantCulture,
                                              DateTimeStyles.None,
                                              out ArticleDate))
            {
                //date is fine
            }

答案 3 :(得分:1)

Twitter APi XML中针对此特定日期格式的实际代码修复如下:

using System.Globalization;

CultureInfo enUS = new CultureInfo("en-US");                
DateTime dateValueOut;
string userCreated = "Fri May 03 15:22:09 +0000 2013"; 

bool isDateFormatted = DateTime.TryParseExact(userCreated,"ddd MMM dd HH:mm:ss zzzz yyyy",enUS,DateTimeStyles.None, out dateValueOut);

if (isDateFormatted == true)
{
    DateTime formattedDateTime = dateValueOut;                    
}

答案 4 :(得分:0)

您可以使用

var date = DateTime.TryParseExcact(d.Element("created_at").Value, new String[]{"pattern" });

http://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact.aspx