2016-11-01 7 views
0

は、C#でUTCにいくつかのローカル時間に変換しますユーザーのタイムゾーン。は、私はこのような何かを行うしようとしています

私はこの情報をサーバーに送信しています。サーバー側では、これを達成したいと思います:

タイムゾーンの値が何であるかを確認してください。 "UTC + 1"(またはUTC時間のその他の値)の場合は、保存する前にUTCに変換します。

どうすればよいかわかりません:サーバーがそれを検出できるように、タイムゾーン情報としてどの値をクライアントから送信すればよいですか?たとえばUTC + 1です。

私はこのような例を見て:そのIDによるタイムゾーンであるかを調べる方法について

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); 

を、私はこのような何かを行うことはできません。私が得る、ので

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("UTC+1"); 

を例外:もちろん、

追加情報: ローカルcomにタイムゾーンID「UTC + 1」が見つかりませんでしたパター。

誰かがすべてUTC + -someNumberためのIDであるか知っている、またはいくつかの異なる方法でUTC文字列からタイムゾーンを検出する方法はありますか?

誰かがこの種の変換を経験しましたか?

+0

あなたがで* *情報は、ローカルシステム上で利用可能であるかについて、すべての時間帯を得ることができます'TimeZoneInfo.GetSystemTimeZones()'を呼び出し、 'BaseUtcOffset'をチェックしてください。それに加えて、サーバーに送る前に、クライアント側でUTC時刻を計算する方が簡単かもしれません。 – Clemens

答えて

1

私が覚えている限り、タイムゾーンで作業する唯一の方法は、お使いのOSで利用可能なフルネームです。

同様の質問hereがあります。

MSDNからのリストはhereです。

フレームワークでサポートされているものへのマッピングを作成しない限り、 "UTC + 1"のような文字列を変換するのは簡単な方法ではないようです。

0

あなたはTimeZoneInfo.CreateCustomTimeZone()を使用することができます。

DateTime utcTime = DateTime.UtcNow; 
TimeZoneInfo targetTimeZone = TimeZoneInfo.CreateCustomTimeZone("MyId", TimeSpan.FromHours(1), "Somewhere", "Somewhere"); 
DateTime targetTime = TimeZoneInfo.ConvertTime(utcTime, targetTimeZone); 

またはあなたがDateTimeOffset、またはDateTime.AddHours(1)を使用することができます。

var datetimeOffset = new DateTimeOffset(yourDateTime, TimeSpan.FromHours(1)); 
var otherDatetime = yourDateTime.AddHours(1); 
関連する問題