好的,所以我正在尝试读取 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 格式
当心。您收到的时间以 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
您应该使用 DateTime 的 ParseExact 来获取您的价值
DateTime.ParseExact("Fri May 03 15:22:09 +0000 2013","ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture);
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
}
来自 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;
}
您可以使用
var date = DateTime.TryParseExcact(d.Element("created_at").Value, new String[]{"pattern" });
http://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact.aspx