您现在的位置: 365建站网 > 365文章 > 使用JavaScriptSerializer进行序列化日期类型应该注意的问题

使用JavaScriptSerializer进行序列化日期类型应该注意的问题

文章来源:365jz.com     点击数:411    更新时间:2011-03-31 18:26   参与评论
JavaScriptSerializer在序列化DateTime时,是用刻度来表示的,具体在Json体现为:\/Date(315547200000)\/  用V进行一个闭包, 括号内为Date的刻度,刻度就是时间滴答滴答经过的毫秒数,刻度计算的赶止时间为:UTC 1970年1月1日午夜开始的,
注意该起止时间是UTC时间,看看以下程序:
Customer cs = new Customer();
cs.BirthDay
= new DateTime(1980, 1, 1, 12, 0, 0);
cs.Name
= "steven";
cs.Sex
= true;

JavaScriptSerializer js
= new JavaScriptSerializer();
string output = js.Serialize(cs);

Customer cust
= js.Deserialize(output, typeof(Customer)) as Customer;
if (cust != null)
{

txtBirthDay.Text
= cust.BirthDay.Value.ToString();

}

这样处理时会带来一点问题就是,在进行序列化之后的日期不会是原来的 1980-1-1 12:00:00,而是会根据utc时间得来的一个时间,有可能是1979-12-31 4:00:00,这样在界面进行UI展示的时候会带来一致的问题!

   其它处理很简单,序列化之前先把本地时间转换来UTC时间,再在反序列之后,把UTC时间转换为本地时间就OK了,看看更改之后代码:

Customer cs = new Customer();
cs.BirthDay
= new DateTime(1980, 1, 1, 12, 0, 0).ToUniversalTime();
cs.Name
= "steven";
cs.Sex
= true;

JavaScriptSerializer js
= new JavaScriptSerializer();
string output = js.Serialize(cs);

Customer cust
= js.Deserialize(output, typeof(Customer)) as Customer;
if (cust != null)
{

txtBirthDay.Text
= cust.BirthDay.Value.ToLocalTime().ToString();

}

 

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (411人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号