json转java实体时间戳处理,解决json⽇期格式问题的3种⽅法开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使⽤系统⾃带的⼯具类序列化后将得到⼀个很长的数字表⽰⽇期数据,如下所⽰:
//设置服务器响应的结果为纯⽂本格式
context.Response.ContentType = "text/plain";
//学⽣对象集合
List students = new List
{
new Student(){Name ="Tom",
Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
new Student(){Name ="Rose",
Birthday =Convert.ToDateTime("2014-01-10 11:12:12")},
new Student(){Name ="Mark",
Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
};
//javascript序列化器
JavaScriptSerializer jss=new JavaScriptSerializer();
//序列化学⽣集合对象得到json字符
string studentsJson=jss.Serialize(students);
//将字符串响应到客户端
context.Response.Write(studentsJson);
context.Response.End();
运⾏结果是:
其中Tom所对应⽣⽇“2014-01-31”变成了1391141532000,这其实是1970 年 1 ⽉ 1 ⽇⾄今的毫秒数;
1391141532000/1000/60/60/24/365=44.11年,44+1970=2014年,按这种⽅法可以得出年⽉⽇时分秒和毫秒。这种格式是⼀种可⾏的表⽰形式但不是普通⼈可以看懂的友好格式,怎么让这个格式变化?
解决办法:
⽅法1:在服务器端将⽇期格式使⽤Select⽅法或LINQ表达式转换后发到客户端:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Script.Serialization;
namespace JsonDate1
{
using System.Linq;
///
/// 学⽣类,测试⽤
///
public class Student
{
///
/// 姓名
///
public String Name { get; set; }
///
/// ⽣⽇
///
public DateTime Birthday { get; set; }
}
///
/// 返回学⽣集合的json字符
///
public class GetJson : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//设置服务器响应的结果为纯⽂本格式
context.Response.ContentType = "text/plain";
//学⽣对象集合
List students = new List
{
new Student(){Name ="Tom",Birthday =Convert.ToDateTime("2014-01-31 12:12:12")}, new Student(){Name ="Rose",Birthday =Convert.ToDateTime("2014-01-10 11:12:12")}, new Student(){Name ="Mark",Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
};
//使⽤Select⽅法重新投影对象集合将Birthday属性转换成⼀个新的属性
//注意属性变化后要重新命名,并⽴即执⾏
var studentSet =
students.Select
(
p => new { p.Name, Birthday = p.Birthday.ToString("yyyy-mm-dd") }
).ToList();
//javascript序列化器
JavaScriptSerializer jss = new JavaScriptSerializer();
//序列化学⽣集合对象得到json字符
string studentsJson = jss.Serialize(studentSet);
//将字符串响应到客户端
context.Response.Write(studentsJson);
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
Select⽅法重新投影对象集合将Birthday属性转换成⼀个新的属性,注意属性变化后要重新命名,属性名可以相同;这⾥可以使⽤select⽅法也可以使⽤LINQ查询表达式,也可以选择别的⽅式达到相同的⽬的;这种办法可以将集合中客户端不⽤的属性剔除,达到简单优化性能的⽬的。
运⾏结果:
这时候的⽇期格式就已经变成友好格式了,不过在javascript中这只是⼀个字符串。
⽅法⼆:
在javascript中将"Birthday":"\/Date(1391141532000)\/"中的字符串转换成javascript中的⽇期对象,可以将Birthday这个Key所对应的Value中的⾮数字字符以替换的⽅式删除,到到⼀个数字1391141532000,然后实例化⼀个Date对象,将1391141532000毫秒作为参数,得到⼀个javascript中的⽇期对象,代码如下:
json⽇期格式处理
$(function() {
$.getJSON("getJson.ashx", function (students) {
$.each(students, function (index, obj) {
$("
").html(obj.Name).appendTo("#ulStudents");
//使⽤正则表达式将⽣⽇属性中的⾮数字(\D)删除
//并把得到的毫秒数转换成数字类型
var birthdayMilliseconds = parseInt(place(/\D/igm, ""));
//实例化⼀个新的⽇期格式,使⽤1970 年 1 ⽉ 1 ⽇⾄今的毫秒数为参数
var birthday = new Date(birthdayMilliseconds);
$("
").LocaleString()).appendTo("#ulStudents"); ;
});时间正则表达式java
});
});
json⽇期格式处理
运⾏结果:
上的使⽤正则/\D/igm达到替换所有⾮数字的⽬的,\D表⽰⾮数字,igm是参数,分别表⽰忽视(ignore)⼤⼩写;多次、全局(global)替换;多⾏替换(multi-line);有⼀些时候还会出现+86的情况,只需要变换正则同样可以达到⽬的。另外如果项⽬中反复出现这种需要处理⽇期格式的问题,可以扩展⼀个javascript⽅法,代码如下:
$(function () {
$.getJSON("getJson.ashx", function (students) {
$.each(students, function (index, obj) {
$("
").html(obj.Name).appendTo("#ulStudents");
//使⽤正则表达式将⽣⽇属性中的⾮数字(\D)删除
//并把得到的毫秒数转换成数字类型
var birthdayMilliseconds = parseInt(place(/\D/igm, ""));
//实例化⼀个新的⽇期格式,使⽤1970 年 1 ⽉ 1 ⽇⾄今的毫秒数为参数
var birthday = new Date(birthdayMilliseconds);
$("
").LocaleString()).appendTo("#ulStudents");
$("
").html(Date()).appendTo("#ulStudents");
});
});
});
//在String对象中扩展⼀个toDate⽅法,可以根据要求完善
Date = function () {
var dateMilliseconds;
if (isNaN(this)) {
//使⽤正则表达式将⽇期属性中的⾮数字(\D)删除
dateMilliseconds =place(/\D/igm, "");
} else {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论