我一直在处理JSON字符串中的日期,没有标准的方式来表示,这就是为什么有这么多不同的方法!或许最好的方式是在JSON规范中指定一个标准的日期格式!
微软采用自己的方式,计算从1970年以来的UTC格式的毫秒数,类似于"/Date(1319266795390+0800)/"
我们一直使用正则表达式将上述字符串转换为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))
更新:
有一种替代方法可以使用正则表达式在JavaScript中调整从服务器返回的JSON字符串以使其更易读:
var str = "/Date(1319266795390+0800)/";
str.replace(/\/Date\((\d+)\+\d+\)\//, function (str, date) {
return new Date(Number(date)).toString();
});