Używam usługi WCF, która zwraca bieżący czas serwera. Mój klient znajduje się w innej strefie czasowej. Kiedy zadzwonię do tej usługi, to automatycznie konwertuje czas zwrócony przez serwer na czas lokalny, którego nie chcę. Jak mogę to zignorować?Czas konwersji WCF na podstawie strefy czasowej automatycznie
Odpowiedz
Konwertuj wysyłane z usługi WCF na UTC, a gdy tworzysz nowe czasy w kliencie, określ je jako rodzaj UTC. To będzie podstawą czasu do uniwersalnej standardowej strefy czasowej. Możesz wyświetlić czas klientowi i upewnić się, że jest to czas UTC. To złagodzi wszelkie rozbieżności lub niejasności dotyczące tego, czym jest ten czas.
DateTime serverTimeRaw = myService.GetServerTime();
DateTime serverTimeUTC = new DateTime(serverTimeRaw.Ticks, DateTimeKind.Utc);
Console.WriteLine(serverTimeUTC); // Prints server time as UTC time
Jeśli rzeczywiście muszą reprezentować razy w ich odpowiedniej strefy czasowej, trzeba będzie wysyłać informacje o strefie czasowej wraz z DateTime. Polecam tworzenie typu, który zawiera obie części informacji i zwraca je zamiast samego DateTime. Informacje o strefie czasowej nie są nieodłącznym elementem obiektu DateTime. Są to dwie odrębne kwestie, które zapewniają kompozytowe znaczenie tylko wtedy, gdy są faktycznie skomponowane.
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();