我正在使用几个存储DateTime.Now的变量用于数据库和Web服务。有人询问如果将应用程序部署到不同时区的计算机,代码将如何运行。应用程序将处理来自不同时区的数据。我如何确保不会因此而出现任何问题?
答案 0 :(得分:6)
当您处理不同的时区时,将所有内容转换为通用时间通常很有帮助。恰好有DateTime
的属性可以准确地为您提供。
答案 1 :(得分:4)
假设一段数据来自不同的时区。您的系统为其提供时间戳,该时间戳是机器上的当前时间,并存储它。
现在,位于其他时区的位置的用户需要在该事务发生时查找,并将其与系统上日志文件中的内容进行比较。时间值不会同步,因为他们的日志正在使用他们的时间,而您的日志正在使用您的时间。
典型的解决方案是将时间存储为通用时间(也称为格林威治时间)。当您从另一个时区收到请求时,您要么将日期转换回该时区的时间(这样他们可以与他们的日志进行比较),或者让他们知道您正在返回通用时间,他们将不得不自行转换(或者,如果它们还没有,则切换到使用通用时间)。
切换到通用时间还将处理您的应用程序部署在其他地方的问题,但在此之前,时区的更深层次问题就出现了。
答案 2 :(得分:1)
添加到NickLarsen的正确答案......
GETUTCDATE - SQL Server 2008 UTC日期函数。
UtcNow() - .Net UTC日期时间函数。
在服务器上使用UTC并转换为用户的时区通常只是为了显示(或者至少尽可能晚)。