将字符串中的JSON日期替换为更具可读性的日期
我们想向正在测试我们的应用程序的用户展示一些JSON。 所以我们在ASP.NET代码后面的文件中调用我们的REST服务,并返回一个字符串,它包含很多JSON。
然后,我们将它放在页面中的PRE元素中,调用美化来创建可读的JSON,并且都很好:显示了一些可读的内容。
好,但有一件事:所有日期都以正常的JSON格式显示,如“/ Date(1319266795390 + 0800)/”
我想要做的是在JSON(C#)字符串中用'普通'日期替换那些JSON日期,所以在后面的代码中,在将字符串添加到PRE元素之前。
我正在考虑一些正则表达式,但我无法弄清楚如何...
解决方案在问题中显示的字符串内。 JavaScript Date对象将解析该格式并生成可读的版本,因此Date(1319266795390+0800)
将返回“Wed Apr 18 2012 08:13:22 GMT-0500(Central Daylight Time)”。
要从字符串中删除正斜杠,您可以使用带正则表达式的替换函数: "/Date(1319266795390+0800)/".replace(///g, '')
. "/Date(1319266795390+0800)/".replace(///g, '')
。
我一直在用JSON字符串处理日期现在有一段时间,没有标准的方式,这就是为什么有这么多不同的方式来做到这一点! 如果JSON规范能够首先为日期指定标准格式,那么可能会更好!
微软正在以自己的方式进行,自1970年以来以UTC格式计算msecs,这就像"/Date(1319266795390+0800)/"
自从在ASP.Net JavaScriptSerializer
输出之上使用正则表达式以来,我们一直将上述字符串更改为ISO-8601格式。 这是一个W3C标准,可读性强,大多数浏览器将日期序列化为字符串,方法如下:
static readonly long DATE1970_TICKS = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
static readonly Regex DATE_SERIALIZATION_REGEX = new Regex(@"/Date((?<ticks>-?d+))/", RegexOptions.Compiled);
static string ISO8601Serialization(string input)
{
return DATE_SERIALIZATION_REGEX.Replace(input, match =>
{
var ticks = long.Parse(match.Groups["ticks"].Value) * 10000;
return new DateTime(ticks + DATE1970_TICKS).ToLocalTime().ToString("yyyy-MM-ddTHH:mm:ss.fff");
});
}
您可以轻松更改格式以满足您的需求,查看自定义日期和时间格式,查看此处的MSDN文章
以下是它的使用方式:
JavaScriptSerializer ser = new JavaScriptSerializer();
var JsonSrt = ISO8601Serialization(ser.Serialize(DateTime.Now)); // ""2012-05-09T14:51:38.333""
更新:
还有一种方法可以将使用Regex从服务器返回的JSON字符串调整为更具可读性的形式:
var str = "/Date(1319266795390+0800)/";
str.replace(//Date((d+)+d+)//, function (str, date) {
return new Date(Number(date)).toString();
});
你可以使用这个:
string date = "/Date(1319266795390+0800)/";
string regex = @"/Date((.*?)+(.*?))/";
Match match = Regex.Match(date, regex);
DateTime d = new DateTime(1970, 01, 01).AddMilliseconds(long.Parse(match.Result("$1")));
链接地址: http://www.djcxy.com/p/46657.html
上一篇: replace a JSON date in a string to a more readable date