2011-03-09 1 views
4

私がする時間を変換する必要があります。ここで私のWebアプリケーションでは、「UTC + 03 30タイムゾーンが」UTCの日付です:UTCの日付を自分のタイムゾーンに変換する方法は?

DateTime dt = DateTime.UtcNow; 

は私の時間帯かどうかにUTCを変換するすべての機能がありますか? ASP.NETに関数がある場合は、自分のアプリケーションに新しい関数を書くことを自分自身に関与させたくありません。

アプリケーションが世界中の別のサーバーでホストされている可能性があります。これが、私がUTCの日付を使用した理由です。

現在のUTC時刻に3:30を追加する関数が必要です。

+0

を使用してタイムゾーンのリストを取得することができます任意のタイムゾーン

Shared Function FromUTC(ByVal d As Date, ByVal tz As String) As Date Return (TimeZoneInfo.ConvertTimeBySystemTimeZoneId(d, TimeZoneInfo.Utc.Id, tz)) end function 

にUTCに変換させますght節約時間が発生する? – Axarydax

+0

私は昼間の保存について混乱していることは考えていませんか? – kamiar3001

+0

なぜあなたはそのタイムゾーンを使用しようとしているのか分かりませんので、言い表せません。 UTC + 3:30の特別な点は? –

答えて

7

あなたのタイムゾーンは本当に UTC + 3:30で、夏時間がないのですか?その場合は、適切なオフセット(3.5時間)を使用してDateTimeOffsetを作成することができます。たとえば:

あなたの代わりに DateTimeDateTimeOffsetを与えるもちろん
DateTimeOffset dtOffset = new DateTimeOffset(DateTime.UtcNow, 
              TimeSpan.FromHours(3.5)); 

...あなたはそれを使用することができますか?

よりよい解決策がTimeZoneInfoを使用することです - たとえば、あなたが正しいタイムゾーンを取得し、

DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, tzInfo); 

を呼び出す...またはあなたがTimeZoneInfoを使用するが、それでもDateTimeOffsetを得ることができる可能性:

DateTimeOffset dto = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tzInfo); 

個人的には、DateTimeの意味が多少あいまいで正しく動作するのが難しい場合はできるだけDateTimeOffsetを使用することをおすすめします。

.NETの日付と時刻の処理は、残念ながらちょっと混乱しています。私はNoda Timeというプロジェクトを持っていますが、これは完了しても状況を改善するはずですが、現時点では生産準備ができていません。

+0

DateTimeが必要な場合は、いつも 'dtoffset.DateTime' DateTimeOffsetは 'System.ServiceModel.Syndication'の外にあり、BCLの他の部分はそれを使用していないようです(ほとんど何もSystem.Uriを使用せず、通常は文字列を期待しています)。 –

+0

@Michael:True、とにかくこれは表示境界にしかないことを願っています。この場合は、実際にフォーマットする必要があります。残念ながら、現時点では十分な情報がありません:( –

-1

これはあなたがするときdayliあなたは何をします

For Each timeZone As TimeZoneInfo In tzCollection 
    Console.WriteLine(" {0}: {1}", timeZone.Id, timeZone.DisplayName) 
Next 
+0

VB Date型を使うのは本当にC# - フレンドリーじゃないですか?また、* system *タイムゾーンがOPは使いたい。 –