2009-08-31 18 views
6

私はサーバーの現在時刻を返すWCFサービスを使用しています。 クライアントが異なるタイムゾーンにあります。このサービスを呼び出すと、サーバーから返された時刻が現地時間に自動的に変換されます。これは不要です。どのように私はこれを無視するのですか?タイムゾーンに基づいて時間を自動的に変換するWCF

答えて

3

WCFサービスからUTCに送信したものをクライアントに変換し、クライアントで新しい時刻を作成する場合はUTCとして指定します。これにより、普遍的な標準時間帯の基準になります。クライアントに時刻を表示し、それをUTC時刻として識別できるようにすることができます。その時間が本当に何であるかについての不一致やあいまいさが緩和されます。

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

時刻を適切なタイムゾーンで実際に表現する必要がある場合は、タイムゾーン情報とDateTimeを一緒に送信する必要があります。私は、両方の情報をカプセル化し、DateTime自体ではなく、その情報を返す型を作成することをお勧めします。タイムゾーン情報は、DateTimeの本質的なコンポーネントではありません。それらは2つの別々の懸念事項であり、実際に構成されたときにのみ複合的な意味を提供します。

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(); 
関連する問題