zoukankan      html  css  js  c++  java
  • 使用JavaScriptSerializer进行序列化日期类型应该注意的问题

    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();

    }

      好了,到此为此吧!

  • 相关阅读:
    70 sudo-用来以其他身份来执行命令
    69 su -用户和工作组管理
    68 id -显示用户的id
    71 fdisk-Linux 的磁盘分区表操作工具。
    《刘润·5分钟商学院》学习总结01
    批量创建用户和密码
    20 seq 某个数到另外一个数之间的所有整数
    grub.conf文件参数详解
    dig 常用的域名查询工具
    请问-bash-4.1$ 出现故障的原理及解决办法?
  • 原文地址:https://www.cnblogs.com/repository/p/2001394.html
Copyright © 2011-2022 走看看