2017-01-20 1 views
0

私は、上記の文字列から07:00山岳部時間を抽出し、に任意の日付をフォーマットすることができどのように文字列形式キャプチャ文字列からUTC時間、そこにすべてのDateTimeをフォーマット

string utcdt = "2017-01-01T15:48:00-07:00"; 

戻されている日付を持っていますこの地域の書式設定?

変数utcdtに返されたUTC時間が異なることがあり、WinFormアプリケーションで使用される他のすべての日付が同じタイムゾーンの仕様に準拠する必要があるため、コンピュータのタイムゾーンを変更したくありません。

私はフェデックスのAPIを使用していますが、これは

string utcdt = "2017-01-01T15:48:00-07:00"; 

今日付returnerdの1つの形式である
編集後のアプリケーションでのデータを返す

foreach (TrackingDateOrTimestamp timestamp in trackDetail.DatesOrTimes) 
    Console.WriteLine("{0}: {1}", timestamp.Type, timestamp.DateOrTimestamp); 

あり私の現地時間 - 意味

01/01/2017 17:48:00 

私は、日付を一致させるための解決策を考え出しています。

+1

タイムゾーンはありません。オフセットがあります。おそらく夏には-7よりむしろ-6のオフセットでフォーマットしたいと思うでしょう。本当に、単一のオフセットを知るのではなく、ユーザーが表示したい時間帯を調べようとするべきです。 –

+0

@JonSkeet - あなたは私を失った...私はオフセットがありますか? – NadineSmithJonesPicard

+0

はい、それは "-07:00"です。現地時間はUTCから7時間遅れているという、UTCオフセットです。あなたはあなたのストリングのどこにでも「山岳の時間」はありません。 –

答えて

1

DateTimeOffsetクラスを使用すると、文字列をローカル時刻に解析できます。この文字列はUTCからオフセットされています。その後、オフセットをTimeSpanとして保存することができます。

後で、同じオフセットを使用する必要が再び別のDateTimeを変換するDateTimeOffsetクラスを使用し、その後に:

string dto = "2017-01-01T15:48:00-07:00"; 

DateTimeOffset dateTimeOffset = DateTimeOffset.Parse(dto); 

DateTime utcDateTime = dateTimeOffset.UtcDateTime; 
TimeSpan timezoneOffset = dateTimeOffset.Offset; 


MessageBox.Show("UTC DateTime: " + utcDateTime); 
MessageBox.Show("Offset: " + timezoneOffset); 

DateTimeOffset nowWithOffset = DateTimeOffset.UtcNow.ToOffset(timezoneOffset); 

MessageBox.Show("Now in other timezone: " + nowWithOffset.ToString("O")); 

注意他のコメンテーターが書かれているもの:これは正しく、夏時間に対処していません。それに対処するには、実際には実際のタイムゾーンを知る必要があります。

+0

なぜDateTimeに変換するのですか?これは、DateTimeOffsetを使用して解決された問題を取り戻します。 –

+0

@PanagiotisKanavosこの回答の説明のためだけに – NineBerry

+0

@NineBerry - 混乱を避けるために少し編集しました。 –

関連する問題