2017-06-13 8 views
1

私は時間の解析に苦労しています。私の入力は "Z"で終わる時間文字列です。私はそれがUTCであると期待します。その文字列を解析すると、2時間が結果に追加されます。何故かはわからない。特定の文化を使用しても違いはありません。私の時間に2時間が追加される理由

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); 
string inTime = "2015-04-25T23:39:15Z"; 
DateTime outTime = DateTime.Parse(inTime, ci); 
string outTime_string = outTime.ToString("yyyy-MM-ddTHH:mm:ssZ", ci); 
// outTme and outTime_string are both 2015-04-26T01:39:15Z 

答えて

7

デフォルトでは、DateTime.ParseLocalの「種類」に変換されます。 (それを確認するには、outTime.Kindを印刷してください。)したがって、ソースは普遍的だと理解していますが、システムの現地時間に調整しています。 カルチャーは、タイムゾーンのみのフォーマットとカレンダーシステムとは関係ありません。

あなたはDateTimeStyles値指定していることを防ぐことができます。その時点で

DateTime outTime = DateTime.Parse(inTime, ci, DateTimeStyles.AdjustToUniversal); 

を、outTime.KindUtcなり、期待通り値は23:39午後になります。

クイックプラグ:全体DateTime.Kindビットが混乱しています。 3つの異なる種類の価値を表すタイプを持つことはひどいことです。私のNoda Timeプロジェクトを見て、.NETでの日付/時間処理の別のアプローチが必要な場合があります。

4

これは、ローカル時刻を返します。 This will fix that

var x = DateTime.Parse(inTime, ci, 
      System.Globalization.DateTimeStyles.AdjustToUniversal); 

See this answer as well

私はあなたの代わりに日時ののDateTimeOffset、フォーマット文字列でas recommended in MSDN when using a time zone offset specifierに解析することをお勧め:

タイムゾーンは、対処するための本当の痛みですと。

+0

ありがとうございました!それはそれだった。 –

関連する問題