【发布时间】:2011-01-30 09:28:58
【问题描述】:
我使用了几个变量来存储 DateTime.Now 用于数据库和 Web 服务的目的。有人问如果将应用程序部署到不同时区的机器上,代码将如何表现。该应用程序将处理来自不同时区的数据。我如何确保不会因此而出现问题?
【问题讨论】:
我使用了几个变量来存储 DateTime.Now 用于数据库和 Web 服务的目的。有人问如果将应用程序部署到不同时区的机器上,代码将如何表现。该应用程序将处理来自不同时区的数据。我如何确保不会因此而出现问题?
【问题讨论】:
当您处理不同的时区时,将所有时间都转换为通用时间通常会很有帮助。碰巧有一个 DateTime 的属性可以准确地为您提供。
【讨论】:
假设一条数据来自不同的时区。你的系统给它一个时间戳,它是你机器上的当前时间,并存储它。
现在位于其他时区位置的用户需要查找该事务发生的时间,并将其与系统上的日志文件中的内容进行比较。时间值不会同步,因为他们的日志正在使用他们的时间,而您的日志正在使用您的时间。
典型的解决方案是将时间存储为通用时间(也称为格林威治时间)。当您收到来自另一个时区的请求时,您可以将日期转换回该时区的时间(以便他们可以与他们的日志进行比较),或者让他们知道您正在返回世界时,他们将不得不自己转换(或者如果他们还没有使用通用时间,则自己切换到使用)。
切换到世界时也将解决您的应用程序被部署到其他地方的问题,但更深层次的时区问题在此之前就出现了。
【讨论】:
添加到 NickLarsen 的正确答案...
GETUTCDATE - SQL Server 2008 UTC 日期函数。
UtcNow() - .Net UTC 日期时间函数。
在服务器上使用 UTC 并转换为用户的时区通常是一个好主意,仅用于显示(或至少尽可能晚)。
【讨论】: