3月11日、 2012、2:38:58 AM、夏時間を守っている米国とカナダの地域で有効な日時ではありませんでした。明らかに、コードはこれらの領域のいずれかにあるコンピュータで実行されています。
は、任意のタイムゾーンオフセットを無視して、
DateTime
に文字列を変換するには、あなたが
DateTimeOffset.Parse
を呼び出し、結果の
DateTime
コンポーネントを取得できます。
DateTime dt = DateTimeOffset.Parse("2012-03-11T02:53:58-08:00").DateTime;
string strDt = dt.ToString(); // "3/11/2012 2:53:58 AM"
UPDATE:だから、DateTime.Parse
の違いは何とDateTimeOffset.Parse
元の文字列にタイムゾーンオフセットが含まれている場合は?あなたの現在のタイムゾーンが太平洋標準時であると仮定し、これらの2つの例を考えてみます。
// Example 1: DateTime.Parse(String)
DateTime dt = DateTime.Parse("2012-03-11T06:00:00-04:00");
Console.WriteLine(dt.ToString("o")); // 2012-03-11T03:00:00.0000000-07:00
DateTime.Parse
は現地時に解析された日付と時刻を調整するオフセット使用しています。東部夏時間(UTC-04:00)から太平洋夏時間(UTC-07:00)への変換を反映して、時刻が午前6時から午前3時に変更されたことに注意してください。あなたの質問では、DateTime.Parse
が太平洋標準時(UTC-08:00)から太平洋夏時間(UTC-07:00)に時間を自動的に調整したため、時間が変更されました。
// Example 2: DateTimeOffset.Parse(String)
DateTimeOffset dto = DateTimeOffset.Parse("2012-03-11T06:00:00-04:00");
Console.WriteLine(dto.DateTime.ToString("o")); // 2012-03-11T06:00:00.0000000
Console.WriteLine(dto.Offset); // -04:00:00
DateTimeOffset.Parse
は簡単です。 DateTime
とOffset
のプロパティが解析された日付、時刻、およびオフセットに設定されているDateTimeOffset
の値を返します。 注意:文字列のタイムゾーンのオフセットが、作業するタイムゾーンと一致しない場合は、結果の日付と時刻を自分で調整する必要があります。
フィールドの型がすでに** ** datetimeの場合、文字列をdatetimeに解析するのはなぜですか? –
この文脈で説明するのは難しいです。単に文字列をdatetimeに変換するだけです(SQLデータベースについては忘れてしまいます)。) – ahmd0