1

この文字列Mon Aug 05 08:02:27 +0000 2013をに変換しようとしDateTimeていますが、時間を正しく変換していません。時期により若干の変動があります。ここで何が問題なのですか?以下のコードを使用します

DateTime.ParseExact("Mon Aug 05 08:02:27 +0000 2013","ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture)

それが返す出力は

{05-08-2013 13:32:27}
Date: {05-08-2013 00:00:00}
Day: 5
DayOfWeek: Monday
DayOfYear: 217
Hour: 13
Kind: Local
Millisecond: 0
Minute: 32
Month: 8
Second: 27
Ticks: 635113063470000000
TimeOfDay: {13:32:27}
Year: 2013
4

2 に答える 2

3

DateTimeかなり紛らわしい(壊れている?)wrtです。タイムゾーンなど。

あなたへの簡単な解決策DateTimeStyles.AdjustToUniversalは、次のとおりです。

var d = DateTime.ParseExact("Mon Aug 05 08:02:27 +0000 2013",
  "ddd MMM dd HH:mm:ss zzz yyyy",
  CultureInfo.InvariantCulture,
  DateTimeStyles.AdjustToUniversal
  );

any がない場合、引用している出力に見られるようDateTimeStylesに、デフォルトでは a DateTimeof "kind"が返されます。Local入力文字列には明示的に+0000位置zzzがあり、ローカル時間はコンピューターとは異なる+0000ため、デフォルトでは時間に変換されます。

ではDateTimeStyles.AdjustToUniversal、戻り値の「種類」は ですUtc

おそらく混乱の少ない日付と時刻のインターフェイスについては、Noda Timeを検討してください。

于 2013-08-05T12:18:13.637 に答える
0

ParseExact メソッドは DateTime を現地時間として返し、入力文字列が UTC であることを指定しました。タイム シフトは、タイム ゾーンに起因します。結果の DateTime を UTC に戻すと、入力文字列とまったく同じ時刻が得られます。

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

UTC 時刻を直接取得するには、次のオーバーロードを使用します。

http://msdn.microsoft.com/en-us/library/ms131038.aspx

最後の引数として DateTimeStyles.AdjustToUniversal を渡します。

于 2013-08-05T11:54:05.023 に答える