0

サーバーから返されたものDateTimeなどの米国スタイルをユーザーの現地時間に変換するにはどうすればよいですか? 5/1/2012 3:38:27 PM私はWindows phone用に開発しています。

私はもう試した

DateTime localTime = serverTime.ToLocalTime();

しかし、結果は数時間ずれています。ToLocalTime()ユーザーがいるタイムゾーンへの変換を処理すると思いましたか? おそらく、最初にユーザーのタイムゾーン情報を取得する必要がありますか?

編集1

serverTime は PST タイム ゾーンにあると思います

編集2

私のタイムゾーンは GMT +8 です。以下を試してみましたが、結果としてlocalTimeが15時間遅れています。

TimeZoneInfo localZone = TimeZoneInfo.Local;
DateTime localTime = TimeZoneInfo.ConvertTime(serverTime, localZone);

編集3

これにより、現地時間から 7 時間遅れることになります。

TimeZoneInfo localZone = TimeZoneInfo.Local;
DateTime dateTimeKind = DateTime.SpecifyKind(serverTime, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTime(dateTimeKind, localZone);

編集4

OK、私はそこに到達していると思いますが、これがすべてのタイムゾーンに当てはまるかどうかはわかりません. その結果、現地時間は現在わずか 1 時間進んでいるため、夏時間を考慮する必要があると思います。

TimeZoneInfo localZone = TimeZoneInfo.Local;
double offset = localZone.GetUtcOffset(DateTime.Now).TotalHours;
DateTime dateTimeKind = DateTime.SpecifyKind(serverTime, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTime(dateTimeKind, localZone).AddHours(offset);

DLSでは、Windows Phone で特定のタイム ゾーンを有効にするにはどうすればよいでしょうか。TimeZoneInfo.FindSystemTimeZoneByIdサポートされていないようですか?

4

2 に答える 2

1

これが機能するには、DateTime-objectserverTimeが UTC 形式である必要があります。または、少なくともKindそれが何であるかを知っている必要があります。このページの備考セクションの下にある、これに関するすべての詳細をお読みください。

頑張ってください!

于 2013-04-21T15:29:33.180 に答える
0

時間は何を表していますか?何かが発生した日時など、特定の時点である場合は、次のいずれかの形式で時刻を返すようにサーバー コードを更新する必要があります。

// ISO8601 local time with offset.
// get from DateTimeOffset.ToString("o")
2012-05-01T15:38:27-07:00

// ISO8601 UTC time
// get from DateTime.ToString("o") when kind is UTC
2012-05-01T22:38:27Z

サマータイムが終了すると現地時間があいまいになる可能性があるため、これを行うことは非常に重要です。正しいオフセット (PST の場合は -8、PDT の場合は -7) を指定するか、UTC として送信する必要があります。

現地時間を送信すること自体が理にかなっているシナリオはほとんどありません。持っていると思われる場合は、その時間が何を表しているか詳しく説明してください。

于 2013-04-21T22:22:08.170 に答える