我们正在开发基于.NET和SQL服务器的Web应用程序。在生产环境中,数据库和Web服务器将在不同的系统上运行。
鉴于此,确保业务逻辑层(在Web服务器上运行)与数据库服务器之间的日期和时间同步的最佳方法是什么?
使用SELECT GETDATE()向服务器发出查询是否有效?
例如,不是在我们的类中将日期时间属性初始化为DateTime.Now,我们将使用DBServer.Now进行初始化,其中“Now”是一个静态属性,它将触发SELECT GETDATE()查询并获得响应。
感谢。
答案 0 :(得分:2)
根据您需要的准确程度,将计算机加入域并将时间与域服务器同步应该足够了。在此设置中,差错将全部同步到主域控制器。
答案 1 :(得分:1)
请勿混用两个日期信息来源。使用开发环境的datetime实现(仅限于此),或使用数据库的实现。这样,您就知道日期值总是来自同一个地方,数据库服务器上的时间设置根本不重要。停止使用WHERE releaseDate < NOW()
并使用应用程序中的日期参数不应该是一个很大的障碍。
除了拥有单一的日期信息来源之外,它还会促使您以“正确”的方式处理日期 - 使用正确的数据类型。我不知道.NET,但我已经看到很多日期字符串在PHP世界中摆弄。
您可以(而且应该)做的另一件事是使用NTP在所有服务器上设置时间 - 或任何其他此类解决方案(请参阅Chris Taylor的回答)。
答案 2 :(得分:0)
根据您需要的精确程度,而不是每次DBServer.Now总是访问数据库,可能会缓存数据库和Web服务器之间的差异。然后,当您需要数据库时间时,请使用该缓存的偏移值。每隔X分钟重新计算一次缓存值,以使它们保持同步。