【发布时间】:2013-11-16 12:37:03
【问题描述】:
我阅读了很多关于这个问题的主题——这里是堆栈溢出、msdn 等。 但是,我找不到“黄金之路”。
我有一个经典问题 - 有来自不同时区的客户端和来自另一个时区的服务器。服务器应使用客户端时区。通过 WCF 进行通信。
最合理的解决方案是从客户端发送日期,作为 Utc 时间(即:DateTime.UtcNow(为了同步客户端上的 +/-)和服务器上,使用 ToUniversalTime(为了在服务器上同步 +/- 时区)。
我认为这个解决方案会解决我的问题,但它会导致对当前代码的许多更改。
你知道我的问题有什么“更聪明”的解决方案吗?我错过了什么吗?
谢谢, 乔。
【问题讨论】:
-
一般来说,这几乎可以解决您遇到的时区问题,您将始终将 UTC 时间存储在服务器上,然后客户端会将其转换为它的格式,或者您阅读来自服务器的 UTC 并通过网络将其转换为客户端时区。需要对代码进行大量更改吗?好吧 - 你需要更好地重构代码,例如创建一个静态帮助器或某种扩展方法,你可以轻松地维护处理时区和转换。
-
但这意味着我需要更改所有日期时间属性。没有什么优雅的方法吗?
-
没有“优雅的方式”。我们能给您的唯一真正建议是确保您设计的任何未来系统默认使用 UTC 时间。绝对没有理由应该在当地时间附近构建任何新应用程序。