大约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.:)
对每个层中使用的数据类型有什么好的建议/最佳实践吗?
我认为最好的方法是始终将对象作为UTC传递,并在客户端上转换为本地时间.通过这样做,所有客户都有一个共同的参考点.
要转换为UTC,请在DateTime对象上调用ToUniversalTime.然后,在客户端上,调用ToLocalTime将其置于当前时区.
一个大问题是WCF序列化不支持xs:Date.这是一个很大的问题,好像你想要的只是一个约会,你不应该被迫关注时区.以下连接问题讨论了一些问题:http://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?反馈ID = 349215
如果要明确地表示某个时间点,即不仅仅是日期部分,如果在客户端和服务器上都有.NET 3.5,则可以使用DateTimeOffset类.或者,为了实现互操作性,始终将日期/时间值传递为UTC.