【问题标题】:Client - Server Time Sync客户端 - 服务器时间同步
【发布时间】:2013-11-16 12:37:03
【问题描述】:

我阅读了很多关于这个问题的主题——这里是堆栈溢出、msdn 等。 但是,我找不到“黄金之路”。

我有一个经典问题 - 有来自不同时区的客户端和来自另一个时区的服务器。服务器应使用客户端时区。通过 WCF 进行通信。

最合理的解决方案是从客户端发送日期,作为 Utc 时间(即:DateTime.UtcNow(为了同步客户端上的 +/-)和服务器上,使用 ToUniversalTime(为了在服务器上同步 +/- 时区)。

我认为这个解决方案会解决我的问题,但它会导致对当前代码的许多更改。

你知道我的问题有什么“更聪明”的解决方案吗?我错过了什么吗?

谢谢, 乔。

【问题讨论】:

  • 一般来说,这几乎可以解决您遇到的时区问题,您将始终将 UTC 时间存储在服务器上,然后客户端会将其转换为它的格式,或者您阅读来自服务器的 UTC 并通过网络将其转换为客户端时区。需要对代码进行大量更改吗?好吧 - 你需要更好地重构代码,例如创建一个静态帮助器或某种扩展方法,你可以轻松地维护处理时区和转换。
  • 但这意味着我需要更改所有日期时间属性。没有什么优雅的方法吗?
  • 没有“优雅的方式”。我们能给您的唯一真正建议是确保您设计的任何未来系统默认使用 UTC 时间。绝对没有理由应该在当地时间附近构建任何新应用程序。

标签: c# wcf datetime


【解决方案1】:

通常,您希望服务器仅使用 UTC,这应该使您的信息在任何时区保持一致。

您通常希望在客户端收集一些时区信息,以便您可以允许客户端以适合他们的格式处理日期/时间。

【讨论】:

  • 问题是,在我看来,在整个代码中更改所有日期时间属性并不优雅
  • @user1894419 - 您只需要在向用户显示日期时间值的位置(或您接受用户输入的位置)进行更改。您在其他任何地方单独在 UTC 工作。我不明白这如何导致您必须更改整个代码的属性。
  • @user1894419 几年前,我在一个我工作过的系统上被这个问题刺痛了——不幸的是,没有神奇的修复方法,您需要进行那些必要的更改。但是,我在数据库中有现有数据(都是当地时间),所以有点棘手,但我想出了一个 solution 来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 2018-01-11
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
相关资源
最近更新 更多