14

如何将从 twitter 获得的 JSON 日期格式化为 C# DateTime ?这是我收到日期的格式:

"Tue, 19 Feb 2013 13:06:17 +0000"

我可以用 JSON.NET 做吗?

4

5 回答 5

20

解决了使用DateTime.ParseExact

-> http://blog.kevinyu.org/2012/07/handling-json-in-net.html

链接更新:链接的博客文章已离线。它的缓存副本仍然可以通过 Way Back Machine Internet Archive进行引用。

从博文中复制的常见 .NET 代码是:

public const string Const_TwitterDateTemplate = "ddd MMM dd HH:mm:ss +ffff yyyy";

DateTime createdAt = DateTime.ParseExact((string)jo["created_at"], 
Const_TwitterDateTemplate, new System.Globalization.CultureInfo("en-US"));

在哪里

  • 变量jo是表示created_at日期属性的 JSON 对象,但实际上 Twitter 日期字符串会进入此参数
于 2013-02-19T16:56:12.627 回答
10

流的答案中的部分代码。

public const string Const_TwitterDateTemplate = "ddd MMM dd HH:mm:ss +ffff yyyy";

DateTime createdAt = DateTime.ParseExact((string)jo["created_at"], Const_TwitterDateTemplate, new System.Globalization.CultureInfo("en-US"));
于 2015-06-22T21:05:42.030 回答
6

上面使用 ffff 格式说明符的答案似乎返回了正确的结果,但从技术上讲这是错误的。ffff 是千分之一秒的格式说明符,Twitter 日期中的 +0000 表示与 UTC 的小时和分钟偏移量。请参阅以下格式:

string twitterTime = "Wed Feb 22 15:49:01 +0000 2017";
string twitterTimeformat = "ddd MMM dd HH:mm:ss zzz yyyy";

DateTime dateTime = DateTime.ParseExact(twitterTime, twitterTimeformat,
    CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dateTime);

结果:2017 年 2 月 22 日下午 3:49:01

如果需要,您可以编辑 DateTimeStyles 枚举以返回本地时间而不是 UTC。

自定义日期和时间格式字符串

日期时间样式枚举

于 2017-03-01T04:54:38.197 回答
1

这是 DateTimeOffset 而不是 DateTime。以下应该工作。

DateTimeOffset parsed = DateTimeOffset.Parse("Tue, 19 Feb 2013 13:06:17 +0000");
于 2013-02-19T16:57:09.507 回答
0

我需要这些答案的 PowerShell 变体,以下对我有用。

PS> $Created_At = 'Fri Jun 05 18:15:48 +0000 2020'
PS> [datetime]::ParseExact($Created_At,'ddd MMM dd HH:mm:ss zzz yyyy',(Get-Culture))

Friday, June 5, 2020 1:15:48 PM
于 2020-06-05T19:58:43.530 回答