WCF конвертирует время на основе часового пояса автоматически - PullRequest
6 голосов
/ 31 августа 2009

Я использую сервис WCF, который возвращает текущее время сервера. Мой клиент находится в другом часовом поясе. Когда я вызываю эту службу, она автоматически конвертирует время, возвращаемое сервером, в местное время, которое мне не нужно. Как мне это игнорировать?

1 Ответ

3 голосов
/ 31 августа 2009

Преобразуйте отправленные из службы WCF в UTC, а когда вы создаете новое время в своем клиенте, укажите их как добрые UTC. Это будет основывать время на универсальный стандартный часовой пояс. Вы можете отобразить время своему клиенту и убедиться, что оно указано как время UTC. Это уменьшит любое расхождение или двусмысленность относительно того, что это за время на самом деле.

DateTime serverTimeRaw = myService.GetServerTime();
DateTime serverTimeUTC = new DateTime(serverTimeRaw.Ticks, DateTimeKind.Utc);
Console.WriteLine(serverTimeUTC); // Prints server time as UTC time

Если вам действительно необходимо указать время в соответствующем часовом поясе, вам необходимо отправить информацию о часовом поясе вместе с датой и временем. Я бы порекомендовал создать тип, который инкапсулирует обе части информации, и вернуть его, а не сам DateTime. Информация о часовом поясе не является внутренним компонентом DateTime. Это две отдельные проблемы, и они дают только составное значение, когда составлены.

class ZonedDateTime
{
    public DateTime DateTimeUtc { get; set; }
    public TimeZoneInfo TimeZone { get; set; }

    public DateTime ToDateTime()
    {
        DateTime dt = TimeZoneInfo.ConvertTime(DateTimeUtc, TimeZone);
        return dt;
    }
}

// ...

ZonedDateTime zdt = myService.GetServerZonedTime();
DateTime serverTimeActual = zdt.ToDateTime();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...