2009-08-31 5 views

Répondre

3

Convertissez votre envoi du service WCF en UTC et, lorsque vous créez de nouvelles heures dans votre client, spécifiez-les en tant que type UTC. Cela initialise l'heure au fuseau horaire standard universel. Vous pouvez afficher l'heure à votre client et assurez-vous de l'identifier en temps UTC. Cela atténuera toute divergence ou ambiguïté quant à ce que cette heure est réellement.

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

Si vous avez réellement besoin de représenter les temps dans leur fuseau horaire, vous aurez besoin d'envoyer le temps des informations de zone ainsi que le DateTime. Je recommande de créer un type qui encapsule les deux éléments d'information, et renvoyer cela, plutôt qu'un DateTime lui-même. Les informations de fuseau horaire ne sont pas un composant intrinsèque d'un DateTime. Ce sont deux préoccupations distinctes et elles ne fournissent un sens composite que lorsqu'elles sont réellement composées.

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