2

好的,所以我正在尝试读取 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 格式

4

5 回答 5

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。根据他们的常见问题解答,情况似乎如此。但有人可能会争辩说,既然我们得到了一个偏移量,那么使用提供的那个偏移量可能更正确。如果偏移量发生变化,我们不希望我们的代码中断。因此,使用类更合适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
于 2013-05-13T16:12:23.103 回答
2

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

DateTime.ParseExact("Fri May 03 15:22:09 +0000 2013","ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture);
于 2013-05-13T12:22:37.827 回答
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
            }
于 2013-05-13T12:20:29.197 回答
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;                    
}
于 2015-08-24T13:22:57.527 回答
0

您可以使用

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

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

于 2013-05-13T12:24:46.343 回答