2011-07-17 6 views
6

私のアプリを実行しているデバイスのタイムゾーンオフセットが何分であるかを知る必要があります。たとえば、太平洋標準時(私がテストしているところ)では、int -480を取得する必要があります。アフガニスタンでは、アフガニスタンでは(私の現在の位置からは得ることはできないが、私に必要なアイデアを与えるべきである)例は270点、イギリスでは0点を得る。WP7でタイムゾーンオフセットを分単位で取得するにはどうすればよいですか?

これまでのすべての間違った値である、代わりに0を返した:

int timezoneOffsetInMinutes = (DateTime.Now.ToLocalTime() - DateTime.Now).Minutes// returns 0 instead of the expected -480 

int timezoneOffsetInMinutes = TimeZoneInfo.Utc.BaseUtcOffset.Minutes - TimeZoneInfo.Local.BaseUtcOffset.Minutes;// also returns 0, not -480 

何の例オフセットまたは例のコードが指定されていないようthis postが(同じ質問をされた場合、私は確認されませんでした)、そこに与えられている一つの答えは間違いなくWhaとは無関係です私は探しています。

答えて

5

は、その後、TimeZoneInfoはおそらく、その情報にアクセスするための最も正しい方法である(また、あなたがそのようなタイムゾーンが夏時間をサポートしているかどうかなど、他の情報にアクセスできます):

TimeSpan offset = TimeZoneInfo.Local.BaseUtcOffset; 

しかし、あなたがしたい場合現在それは基本的にDateTimeを代わらたように、私は、DateTimeOffsetを使用しての習慣を身に取得したい(DSTの変更を含む)は、オフセット(タイムゾーンに「ローカル」の時間を表すことができますそれはローカルマシンとは異なります):

TimeSpan offset = DateTimeOffset.Now.Offet; 
2
DateTime utc = DateTime.Now.ToUniversalTime(); 
DateTime local = DateTime.Now; 
TimeSpan diff = (utc - local); 

これは、あなたとUTCの間の正しい時差を返します。あなたはオフセットベース/標準をしたい場合は

+0

これは進歩です - 私は値56(0ではなく、初めて)を得ています。私が期待しているものが得られていないと私がUTCについて理解していないのは何ですか?私のデバイスとエミュレータは両方ともPSTに設定されていて、どちらも同じ値になります。 – Subcreation

+0

私は必要なものがdiff.TinMinutes(diff.Minutesの代わりに)であることを見ています。私はまだオフ値を得ています(予想した-480の代わりに-419.999999)。もし誰かがここで何が起こっているのか教えてもらえれば、それは感謝します。時計に表示されているものと一致しないタイムゾーンオフセットを持つことは実際には意味がありません。つまり、西海岸の誰も時計をグリニッジ時間から6.99時間に設定していません。たぶんこれは夏時間の製品ですか? – Subcreation

関連する問題