2009-08-31 3 views
6

Ich benutze WCF-Dienst, der aktuelle Uhrzeit des Servers zurückgibt. Mein Client befindet sich in einer anderen Zeitzone. Wenn ich diesen Dienst anrufe, konvertiert er automatisch die vom Server zurückgegebene Zeit in die lokale Zeit, die ich nicht möchte. Wie ignoriere ich das?WCF-Konvertierung Zeit basierend auf Zeitzone automatisch

Antwort

3

Konvertieren Sie den vom WCF-Dienst gesendeten Wert in UTC. Wenn Sie neue Zeiten in Ihrem Client erstellen, geben Sie sie als UTC-Daten an. Dies ist die Basis für die Zeit bis zur universellen Standardzeitzone. Sie können die Uhrzeit für Ihren Client anzeigen und sicherstellen, dass er als UTC-Zeit identifiziert wird. Das wird jegliche Diskrepanz oder Unklarheit über das, was diese Zeit wirklich ist, verringern.

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

Wenn Sie tatsächlich mal in ihrer entsprechenden Zeitzone müssen darstellen, müssen Sie die Zeitzoneninformationen zusammen mit dem Datetime senden. Ich würde empfehlen, einen Typ zu erstellen, der beide Informationen kapselt und diesen zurückgibt, anstatt eine DateTime selbst. Zeitzoneninformation ist keine intrinsische Komponente einer DateTime. Dies sind zwei getrennte Anliegen und stellen nur zusammengesetzte Bedeutung bereit, wenn sie tatsächlich zusammengesetzt sind.

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();