使用JavaScriptSerializer进行序列化日期类型应该注意的问题
JavaScriptSerializer在序列化DateTime时,是用刻度来表示的,具体在Json体现为:\/Date(315547200000)\/ 用V进行一个闭包, 括号内为Date的刻度,刻度就是时间滴答滴答经过的毫秒数,刻度计算的赶止时间为:UTC 1970年1月1日午夜开始的,
注意该起止时间是UTC时间,看看以下程序:
注意该起止时间是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();
}
好了,到此为此吧!
Author:repository
From: http://repository.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
From: http://repository.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述