2009-08-31 11 views

risposta

3

Converti il ​​tuo inviato dal servizio WCF a UTC e quando crei nuove volte nel tuo client, specificale come tipo UTC. Questo baseline il tempo per il fuso orario standard universale. Puoi mostrare l'ora al tuo cliente e assicurarti di identificarlo come ora UTC. Questo allevierà ogni discrepanza o ambiguità su cosa sia realmente quel momento.

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

Se è effettivamente necessario per rappresentare volte nella loro fuso orario, è necessario inviare le informazioni sul fuso orario con il DateTime. Vorrei raccomandare di creare un tipo che incapsuli entrambe le informazioni e restituirlo, piuttosto che un DateTime stesso. Le informazioni sul fuso orario non sono un componente intrinseco di un DateTime. Queste sono due preoccupazioni separate e forniscono solo un significato composito quando sono effettivamente composte.

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