一段时间以来,我一直在处理 JSON 字符串中的日期,没有标准的方法,这就是为什么有这么多不同的方法来做到这一点!如果 JSON 规范首先可以指定日期的标准格式,也许会更好!
微软正在以自己的方式做这件事,以 UTC 格式计算自 1970 年以来的毫秒数,这类似于"/Date(1319266795390+0800)/"
自从在输出之上使用正则表达式以来,我们一直将上述字符串更改为ISO-8601 格式ASP.Net JavaScriptSerializer
。它是 W3C 标准,人类可读,也是大多数浏览器将 Date 序列化为字符串的方式,方法如下:
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 将 JavaScript 中从服务器返回的 JSON 字符串调整为更易读的形式:
var str = "/Date(1319266795390+0800)/";
str.replace(/\/Date\((\d+)\+\d+\)\//, function (str, date) {
return new Date(Number(date)).toString();
});