2012-10-31 4 views
8

UTCから山岳時間に変換する方法を検索しており、DSTを考慮した次の関数が見つかりました。 UTCからマウンテンに変換するときは常にオフセットの-7です(現在は-6になるはずです)。それ以外はそう思わない。誰かが私のためにこれにいくつかの光を照らすことができますか、それはDSTを考慮に入れる方法ですか?DSTを使用してUTCから米国の山岳時刻に変換する

DateTime utcTime = new DateTime(createdDate.Ticks, DateTimeKind.Utc); 
DateTime mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(utcTime, "US Mountain Standard Time"); 

おかげで、 DMAN

+0

特に山にUTCを変換するために、あなたの目標であるか、それがありますUTCをクライアントのタイムゾーンに変換しますか? –

答えて

13

.NETには少なくとも山岳時間である2つのゾーンがあるようです。

あなたが使用しているDST(アリゾナのためのもの)と平野の "Mountain Standard Time"はありません。 DSTを観察しています。だから、あなただけの「US」の部分を取り除くために、それが動作する必要があります。

using System; 

class Test 
{ 
    static void Main() 
    { 
     DateTime octoberUtc = new DateTime(2012, 10, 1, 0, 0, 0, DateTimeKind.Utc); 
     DateTime decemberUtc = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Utc); 
     ConvertToMountainTime(octoberUtc); 
     ConvertToMountainTime(decemberUtc); 
    } 

    static void ConvertToMountainTime(DateTime utc) 
    { 
     DateTime mountain = TimeZoneInfo.ConvertTimeBySystemTimeZoneId 
      (utc, "Mountain Standard Time"); 

     Console.WriteLine("{0} (UTC) = {1} Mountain time", utc, mountain); 
    } 
} 

は出力(UKカルチャー):

01/10/2012 00:00:00 (UTC) = 30/09/2012 18:00:00 Mountain time 
01/12/2012 00:00:00 (UTC) = 30/11/2012 17:00:00 Mountain time 
+3

ありがとう!毎回私はあなたからの答えを見るのですが、それはたいてい大好きです!偉大な仕事とSOへのあなたの貢献を維持! – DMCApps

+1

「米国のマウンテンスタンダードタイムゾーン」はアリゾナ州であり、夏時間は適用されません。 DisplayNameプロパティを確認すると、表示されます。 –

+0

@MattJohnson:編集、ありがとう。 –

1

山岳部標準時はまだあり-7。一般的な信念に反し、私たちは時間を変えないが、時間はゾーン。私たちの現在のタイムゾーンは、実際には山岳夏時間です。時間帯の情報を調べることは....不愉快です

+1

残念ながら、それよりも悪いです - タイムゾーンID .NETが使用する*は、通常、タイムゾーン全体で標準的な時間IDです。 (そして、あなたはあなたのタイムゾーンを変更しません。一つのタイムゾーンは時間全体をカバーし、DSTの変更について知っています。)例えば、より標準的なzoneinfo/tzdbタイムゾーンデータベースでは、 "Europe/London "のタイムゾーンで、UTCとUTC + 1が交互に表示されます。 –

+0

彼は、リージョンがMSTとMDT(別のタイムゾーンの両方)の間で変更され、プログラマがそのロケールのタイムゾーンの間で変更する必要がないことを意味すると思います。 – Trevor

関連する問題