2009-08-31 10 views

Odpowiedz

3

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(); 
Powiązane problemy