4

我有一个客户端/服务器应用程序,用 WCF / C#3.5 编写。

服务器位于我的本地时区,客户端分布在世界各地。

我目前的策略是在服务器和数据库中的任何地方使用 UTC DateTime,并让客户端正确处理他们收到的 UTC DateTime。

这意味着每次客户端收到一条消息时,它的第一个任务就是将消息中包含的 DateTimes 从 UTC 转换为 Local。

我定义了一个接口,由我的所有 [DataContract] 对象实现以帮助完成此任务:

public interface IConvertToLocalTime {
   void ConvertToLocalTime();
}

所以我通常以这种方式处理来自服务器的消息:

public void ServerCallbackFoo(MyObject a, MyObject2 b)
{
  a.ConvertToLocalTime();
  b.ConvertToLocalTime();
  // my business code goes there
}

这很好用,但我对必须手动调用转换方法这一事实并不满意。

在我看来,这个任务应该由 WCF 框架来管理。我在那里错过了什么吗?有没有更好的方法来自动化转换?

4

3 回答 3

1

我可能不理解这个问题,但是根据需要使用内置的 DateTime.ToLocalTime 和 DateTime.ToUniversalTime 会不会更容易,因为您将 .NET 用于服务和客户端。您应该能够检查 .Kind 属性以查看 DateTime 是本地时间还是 UTC。

DateTime test = DateTime.Now; //already local time
DateTime LocalTest = test.ToLocalTime();
DateTime UtcTest = test.ToUniversalTime();

您可能还想查看有关处理 DateTime 序列化的SO Question 。

于 2009-02-04T20:46:29.797 回答
1

据我所知,WCF 不提供任何类型的自动化来帮助时间转换,而且我个人也不希望它这样做。

我同意你的看法。必须手动调用转换例程并不理想。它不会“感觉”优雅。

对我来说,一个更优雅的解决方案是根据需要“懒惰地”评估 DateTime 。无需提供必须调用才能将 UTC 时间转换为本地时间的函数,而是将此逻辑放在每个 DateTime 属性的 get 函数中。这样,当从对象中检索 DateTime 时,它​​会自动转换为本地时间。

于 2009-02-04T14:38:15.627 回答
0

您可以让客户端在向用户呈现信息时精确地转换为/从本地时间转换,反之,在读取用户输入的数据时首先执行此操作。然后客户端的其余部分可以使用 UTC。

于 2012-10-31T20:19:55.973 回答