当前位置:  开发笔记 > 编程语言 > 正文

.NET 3.5中DateTime序列化的最佳实践

如何解决《.NET3.5中DateTime序列化的最佳实践》经验,为你挑选了2个好方法。

大约4年前,我遵循这篇MSDN文章,了解了在.Net 1.1和ASMX Web服务(使用SQL 2000服务器作为后端)上构建.Net客户端的DateTime使用最佳实践.我还记得我对DateTime的序列化问题以及不同时区服务器的测试工作.

我的问题是:对于某些新技术(如WCF和SQL Server 2008)是否有类似的最佳实践文档,特别是添加了新的日期时间类型以存储时区感知信息.

这是环境:

    太平洋时间的SQL Server 2008.

    不同时区的Web服务层.

    客户可以在不同的时区使用.Net 2.0或.Net 3.5.如果它变得简单,我们可以强制每个人升级到.Net 3.5.:)

对每个层中使用的数据类型有什么好的建议/最佳实践吗?



1> Abe Heidebre..:

我认为最好的方法是始终将对象作为UTC传递,并在客户端上转换为本地时间.通过这样做,所有客户都有一个共同的参考点.

要转换为UTC,请在DateTime对象上调用ToUniversalTime.然后,在客户端上,调用ToLocalTime将其置于当前时区.


请注意,客户端将收到日期时间类型为"未指定".当你在它上面调用`ToUniversalTime`时,它将_assume_`Local`时间并实际进行转换.正确的方法是`DateTime.SpecifyKind(myUtcTime,DateTimeKind.Utc)`而不是`ToUniversalTime`.

2> Joe..:

一个大问题是WCF序列化不支持xs:Date.这是一个很大的问题,好像你想要的只是一个约会,你不应该被迫关注时区.以下连接问题讨论了一些问题:http://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?反馈ID = 349215

如果要明确地表示某个时间点,即不仅仅是日期部分,如果在客户端和服务器上都有.NET 3.5,则可以使用DateTimeOffset类.或者,为了实现互操作性,始终将日期/时间值传递为UTC.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有