2017-01-20 16 views
0

この文字列の時刻値2017-01-10T13:19:00-07:00を現地時間(東部)に変換しようとしています。今私の研究から07:00は(私の地元)2時間beindですMountain Timeです。しかし、この構文を実行して返される出力を変換すると、01/17/2017 10:19:00 AMは3時間の違いではなく2時間です。時間帯の処理時間

これは私が使用している構文です。この設定は間違っていますか?正確な現地時間をUTC時間から返すために私は何を変えなければなりませんか?私は自分のコンピュータが(正しいもの)の両方のために東を生成し、次の構文を使用して、正しいタイムゾーンに設定されて確認した

static void Main(string[] args) 
{ 
    string green = "2017-01-10T13:19:00-07:00"; 

    DateTime iKnowThisIsUtc = Convert.ToDateTime(green); 
    DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
     iKnowThisIsUtc, 
     DateTimeKind.Utc); 
    DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime(); 
    Console.WriteLine(localVersion); 
    Console.ReadKey(); 
} 

EDIT

TimeZone zone = TimeZone.CurrentTimeZone; 
string standard = zone.StandardName; 
string daylight = zone.DaylightName; 
Console.WriteLine(standard); 
Console.WriteLine(daylight); 
+1

を私はこれに答えを知らないが、私はあなたがおそらく動作する必要があることを知っていますあなたの変数に正しく名前を付ける方法については、p – Markinson

+0

@Markinson - これは単なる例です。私が望むように働くようになると、変数は意味を持つ名前になります。 –

+0

現地時間が実際に東部時間に設定され、夏時間が適切に設定または設定されていないことを確認しましたか? –

答えて

1

に文字列を変換しますDateTimeオブジェクト:

var datetime = DateTime.Parse("2017-01-10T13:19:00-07:00"); 

タイムゾーンを取得する:

var easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

(変換.ToUniversalTime()に注意してください)ESTに変換:easternTime.ToString();

var easternTime = TimeZoneInfo.ConvertTimeFromUtc(datetime.ToUniversalTime(), easternZone); 

出力:

2017年10月1日午前15時19分〇〇秒

(私は英国にいるので、DD/MM/yyyy、あなたは違うかもしれません)

+0

これは動作しますが、理想的ではありません。'DateTime'へのオフセットを解析すると' Kind'が 'DateTimeKind.Local'に切り替わります。その後、 'ToUniversalTime'関数を使ってローカルからUTCに変換します。実際には、ローカルマシンのタイムゾーンは、方程式の外に残す必要があります。 DSTのフォールバックのあいまいさにも耐えられますが、[隠された第4のDateTimeKind](https://codeblog.jonskeet.uk/2012/05/02/more-fun-with-日付時刻/)。私の答えに示すように、よりクリーンな方法はちょうど 'DateTimeOffset'です。しかし、ありがとう。 :) –

1
// your input string 
string green = "2017-01-10T13:19:00-07:00"; 

// parse to a DateTimeOffset 
DateTimeOffset dto = DateTimeOffset.Parse(green); 

// find the time zone that you are interested in. 
// note that this one is US Eastern time - inclusive of both EST and EDT, despite the name. 
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

// convert the DateTimeOffset to the time zone 
DateTimeOffset eastern = TimeZoneInfo.ConvertTime(dto, tzi); 

// If you need it, you can get just the DateTime portion. (Its .Kind will be Unspecified) 
DateTime dtEastern = eastern.DateTime; 
関連する問題