14

日付/時刻を文字列から DateTime に変換しようとすると、正しい値が得られません。

DateTime testDate = DateTime.ParseExact("2012-08-10T00:51:14.146Z", "yyyy-MM-ddTHH:mm:ss.fffZ",    CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);

私の結果は 2012-08-09 8:51:14 PM です。なぜオフセットされているのですか?入ってくるのと同じ値にしたいだけです。

4

5 に答える 5

24

UTC 日付を解析していますが、DateTime.Kind はローカルです。Kind を Utc としてマークするには、DateTimeStyles.AdjustToUniversal で解析する必要があります。

        DateTime testDate = DateTime.ParseExact("2012-08-10T00:51:14.146Z", "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);

        Trace.WriteLine(testDate);  //  8/9/2012 8:51:14 PM
        Trace.WriteLine(testDate.ToString()); //  8/9/2012 8:51:14 PM
        Trace.WriteLine(testDate.ToUniversalTime()); //  8/10/2012 12:51:14 AM
        Trace.WriteLine(testDate.Kind); // Local

       testDate = DateTime.ParseExact("2012-08-10T00:51:14.146Z", "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);

        Trace.WriteLine(testDate);//  8/10/2012 12:51:14 AM
        Trace.WriteLine(testDate.ToString());//  8/10/2012 12:51:14 AM
        Trace.WriteLine(testDate.ToUniversalTime());//  8/10/2012 12:51:14 AM
        Trace.WriteLine(testDate.Kind); // Utc
于 2012-10-08T18:34:33.373 に答える
5

DateTimeStyles.AdjustToUniversalを使用する必要があります。入力DateTimeはすでにユニバーサルであり、AdjustToUniversal 列挙型オプションは入力を現地時間に変換しますが、結果として Kind of が得られますDateTimeKind.Unspecified

于 2012-10-08T18:33:15.480 に答える
3

サーバーのタイムゾーンは何ですか。これを使用AssumeUniversalすると、入力時間が UTC 時間に変換されます。

あなたはおそらくESTにいます。

于 2012-10-08T18:29:37.880 に答える
2

.AssumeLocalの代わりに使用することを簡単に提案します.AssumeUniversal

不明なタイム ゾーンのタイム スタンプがあり、タイム スタンプがローカル タイム ゾーンで発生したイベントを参照していることがわかっている場合は、タイム スタンプがローカル (つまり、タイムゾーン)。

を使用.AssumeUniversalすることで、タイム スタンプを UTC タイム スタンプであるかのように扱うようにパーサーに指示します。ローカル タイム ゾーンを使用して表示すると、その量だけ自動的にオフセットされます。

編集:

1 つの重要な点:タイム スタンプの大文字の "Z"は、それが UTC タイム スタンプであることを示しています。つまり、それを Universal として扱いたいということです。これをローカル タイム スタンプとして扱いたい場合は、タイム スタンプと対応する解析文字列から Z を削除する必要があります。

参照: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#KSpecifier

于 2012-10-08T18:42:51.783 に答える