私たちは、Web サービス クライアント用の C# アプリケーションを開発しています。これは、Windows XP PC で実行されます。
Web サービスによって返されるフィールドの 1 つは DateTime フィールドです。サーバーは、末尾に「Z」が付いた GMT 形式のフィールドを返します。
しかし、.NET は何らかの暗黙的な変換を行っているようで、時間は常に 12 時間ずれていることがわかりました。
次のコード サンプルでは、12 時間の差がなくなるという点でこの問題をある程度解決していますが、ニュージーランドの夏時間は考慮されていません。
CultureInfo ci = new CultureInfo("en-NZ");
string date = "Web service date".ToString("R", ci);
DateTime convertedDate = DateTime.Parse(date);
に従ってこのデートサイト:
UTC/GMTオフセット
標準タイムゾーン: UTC/GMT +12 時間
夏時間: +1 時間
現在のタイムゾーンオフセット: UTC/GMT +13 時間
追加の 1 時間を調整するにはどうすればよいでしょうか? これはプログラムで実行できますか、それとも PC の設定のようなものですか?
ベストアンサー1
などの文字列の場合2012-09-19 01:27:30.000
、DateTime.Parse
日付と時刻がどのタイムゾーンのものかわかりません。
DateTime
Kindプロパティには、次の 3 つのタイム ゾーン オプションのいずれかを指定できます。
- 未指定
- 地元
- UTC
注: UTCまたはローカルタイムゾーン以外の日付/時刻を表す場合は、DateTimeOffset
。
したがって、質問のコードは次のようになります。
DateTime convertedDate = DateTime.Parse(dateStr);
var kind = convertedDate.Kind; // will equal DateTimeKind.Unspecified
それがどんな種類か知っていると言うのなら、それを教えて下さい。
DateTime convertedDate = DateTime.SpecifyKind(
DateTime.Parse(dateStr),
DateTimeKind.Utc);
var kind = convertedDate.Kind; // will equal DateTimeKind.Utc
システムが UTC 時間であることを認識したら、次のように呼び出すだけですToLocalTime
:
DateTime dt = convertedDate.ToLocalTime();
これにより、必要な結果が得られます。