Лучший способ вычислить UTC / локальное преобразование даты и времени в приложении клиент / сервер WCF - PullRequest
4 голосов
/ 04 февраля 2009

У меня есть клиент-серверное приложение, написанное на WCF / C # 3.5.

Сервер находится в моем локальном часовом поясе, и клиенты разбросаны по всему миру.

Моя текущая стратегия - использовать UTC DateTime везде на сервере и в базе данных, и позволить клиентам правильно обрабатывать UTC DateTimes, которые они получают.

Это означает, что каждый раз, когда клиент получает сообщение, его первой задачей является преобразование 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. Я что-то там упускаю? Есть ли лучший способ автоматизировать преобразование?

Ответы [ 3 ]

1 голос
/ 04 февраля 2009

Возможно, я не понимаю вопроса, но не будет ли проще использовать встроенные DateTime.ToLocalTime и DateTime.ToUniversalTime по мере необходимости, поскольку вы используете .NET как для службы, так и для клиента. Вы должны иметь возможность проверить свойство .Kind, чтобы увидеть, является ли DateTime локальным или UTC.

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

Вы также можете посмотреть этот вопрос SO относительно обработки сериализации DateTime.

1 голос
/ 04 февраля 2009

Насколько мне известно, WCF не предоставляет никакой автоматизации для преобразования времени, и лично я бы этого не ожидал.

И я с тобой согласен. Необходимость вручную вызывать процедуру преобразования не является идеальной. Это не "чувствовать" элегантно.

Для меня более элегантным решением было бы "лениво" оценивать DateTime по мере необходимости. Вместо предоставления функции, которая должна вызываться для преобразования времени UTC в местное время, поместите эту логику в функцию get каждого свойства DateTime. Таким образом, когда DateTime извлекается из объекта, он автоматически конвертируется в местное время.

0 голосов
/ 01 ноября 2012

Вы можете сделать так, чтобы клиенты конвертировали в / из местного времени точно при представлении информации пользователю, и наоборот, сначала делали это при чтении введенных пользователем данных. Остальная часть клиента может затем работать с UTC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...