3

現在、Web から数分ごとにダウンロードされる xml から取得した文字列を解析しようとしています。文字列は次のようになります。

Thu Jul 12 08:39:56 GMT+0100 2012

最初は astring.splitを実行して、時刻 ( ) の後のすべてを取り出しGMT+0100 2012、日付の後に 2012 を挿入しました。

日付が次のように変更されるまで、これはうまく機能しました。

Thu Jul 12 08:39:56 GMT+0000 2012

そのため、C#でその文字列が送信されたときに、GMT +を動的にパスしたいと思います。

アドバイスをいただければ幸いです。

4

4 に答える 4

6

カスタムの日付と時刻の書式文字列でDateTime.ParseExact使用できます。

DateTime.ParseExact("Thu Jul 12 08:39:56 GMT+0000 2012", 
                    "ddd MMM dd hh:mm:ss 'GMT'K yyyy",
                    CultureInfo.InvariantCulture)

これは、文字列とフォーマット文字列が正確に一致しない場合にフォーマット例外をスローするため、失敗した場合にDateTime.TryParseExacta を返すものを使用することをお勧めします。false

@Keithがコメントしたように、その保存されたタイムゾーン情報DateTimeを使用する代わりに、これアプリケーションにとって重要な場合があります。DateTimeOffset

于 2012-07-23T18:55:33.497 に答える
1

できることは 2 つあります。まず、DateTime または DateTimeOffset のいずれかから、ParseExact メソッドでカスタム フォーマット文字列を使用できるようにする必要があります (スタンプの実際のタイム ゾーンが重要であり、対応する時間だけでなく、重要な場合は DateTimeOffset を使用します)。 UTC またはローカル タイム ゾーンで)。

ご覧ください: DateTime カスタム書式文字列

フォーマット文字列はおそらく@"ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy".

ただし、問題が 1 つあります。.NET タイム ゾーン オフセット ("zzzz" または単に "K") は、入力文字列にはない文字列として表現される場合、時と分の間に常にコロンが含まれます。タイム ゾーン オフセットにこのコロンが含まれていない、または含まれてはならないことを指定する方法はありません。コロンなしで解析しようとするとエラーが発生することは間違いありません。

最も簡単な回避策は、文字列を解析する前にその特定のコロンを文字列から削除することです。入力が与えられた場合のコードは、文字列の最後のコロン文字を削除するだけです。

var updatedString = inputString.Remove(inputString.LastIndexOf(':'), 1);
于 2012-07-23T18:56:30.023 に答える
0

これはうまくいくはずです:

XmlConvert.ToDateTime(textBox1.Text, "ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy");
于 2012-07-23T19:11:33.013 に答える
0

DateTime.Parseメソッドを試して、日付を解析してください。

于 2012-07-23T18:47:04.587 に答える