クライアントアプリケーションは、リモートサーバーからWebサービスを介してデータを受信します。アプリケーションは基本的に1.1フレームワークのWindowsフォームで書かれています。
私がやりたいのは、クライアントアプリのTimeZoneをサーバーのTimeZoneに設定して、日時に関連する不一致を回避できるようにすることです。
このために、サーバーのタイムゾーンを取得する方法とクライアントのタイムゾーンをサーバーに設定する方法を知りたいです。
両側で UTC を使用する場合、オフセットが異なることを心配する必要はありません。アプリケーションで表示するために、UTC 日付を現地時間に変換できます。
あなたの問題が正確に何であるかはわかりませんが、私たちのアプリで同様の問題がありました. 異なるタイムゾーンでサーバーからクライアントに日時を送信する場合、クライアントが日時を受信すると、それを現地時間に変換できます。.net 1.1 でこれに対する解決策を見つけることができませんでした。しかし、.Net 2.0 以降では、DateTime にはKindというプロパティがあり、その値をUnspecifiedに設定すると、クライアントはサーバーから受信した時刻をローカル時刻に変換しません。
デビッド、
元の質問は、サーバーから TimeZone 情報を取得することだと思います。サーバーとクライアントを同じゾーンに保つために TimeZOne 情報を取得する必要がある場合があります。
たとえば、デバイスをローカル サーバーと同期する別の場所に移動する場合、サーバーと同期するデバイスがある場合、デバイスのタイムゾーン情報をローカル サーバーのタイムゾーンに設定することができます。
この状況では、クライアントの TimeZone をサーバーのタイムゾーンに設定することが非常に重要です。そうしないと、クライアントは異なる/元のタイムゾーンの時間を表示します。
「DHCP オプション」、「NTP サーバー」などのオプションを検討できると思いますが、この問題の正確な解決策はわかりません。
.NET Framework 3.5 を使用している場合は、TimeZoneInfo クラスを使用してタイム ゾーン情報を取得できます...
// Get time in local time zone
DateTime thisTime = DateTime.Now;
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
// Get Tokyo Standard Time zone
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ?
tst.DaylightName : tst.StandardName, tstTime);
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));