大约4年前,我按照这篇MSDN文章介绍了DateTime使用的最佳实践,该最佳实践是在.Net 1.1和ASMX Web服务(以SQL 2000服务器为后端)上构建.Net客户端的。我仍然记得DateTime所遇到的序列化问题,以及它在不同时区中对服务器所做的测试工作。
我的问题是:是否为WCF和SQL Server 2008等某些新技术提供了类似的最佳实践文档,尤其是添加了新的datetime类型来存储时区感知信息。
这是环境:
对于每一层中要使用的数据类型,是否有任何好的建议/最佳实践?
我认为最好的方法是始终将对象作为UTC传递,并在客户端上转换为本地时间。这样,所有客户都有一个共同的参考点。
若要转换为UTC,请在DateTime对象上调用ToUniversalTime。然后,在客户端上,调用ToLocalTime以获取其当前时区。
请注意,客户端将收到datetime类型为
Unspecified
。当你调用ToUniversalTime
它,它会承担Local
时间和实际做一次转换。正确的方法是DateTime.SpecifyKind(myUtcTime, DateTimeKind.Utc)
代替ToUniversalTime
。