Преобразуйте отправленные из службы 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();