0

パターンで SimpleDateFormat を使用EEE MM/dd hh:mmaし、日付文字列を渡していますThu 10/9 08:15PMが、解析不能な日付例外がスローされています。なんで?私はSimpleDateFormat以前にさまざまなパターンを使用したので、その使用法にかなり精通しています。あまりにも長い間それを見つめているため、明らかな何かを見落としているのかもしれません。

もう 1 つの可能性は、ファンキーな (専門用語の) 空白です。コンテキストは、乱雑な html を整理するために HtmlCleaner を使用している画面スクレイピング アプリです。HtmlCleaner は全体的に非常に優れていることがわかりましたが、たとえば、文字が空白のように見えても StringTokenizer では空白として認識されないという奇妙な問題に気付きました。私はほとんどそれを回避し、文字エンコーディングなどを掘り下げていませんが、疑問に思い始めています。

4

3 に答える 3

2

それが日付形式であるかどうかをテストするには、それを証明するテスト クラスを記述します。これらのタイプのものには、bsh (beanshell) を使用するのが好きです。これが私のテストでした:

sdf = new java.text.SimpleDateFormat("EEE MM/dd hh:mma");
System.out.println(sdf.format(sdf.parse("Thu 10/9 08:15PM")));

どちらが出力されましたか: Fri 10/09 08:15PM

したがって、少なくとも私の jdk/jre バージョン (1.6) では、フォーマット文字列は問題なく機能しているようです。次のステップは、あなたが扱っている文字列がまさにあなたが思っているものであることを確認することだと思います. コードにログを追加して、入力文字列をログ ファイルに出力できますか? 次に、適切なテキスト エディターで表示したり、テスト クラスを実行したり、16 進エディターで表示して、それが通常のテキストであることを確認したりできます。

幸運を!

于 2008-10-08T20:48:39.273 に答える
2

ここで StackOverFlow に関する最初の質問なので、これを解決済みとしてマークする適切な方法が何であるかわかりません。答えのほとんどは、エリックの答えのコメントにあります。

根本的な原因は、日付文字列内の「スペース」文字として認識されなかったことが原因でした。改行禁止スペースである「A0」の 16 進文字でした。最終的に、日付文字列を char 配列に変換し、Character.isSpaceChar() で文字をチェックし、true を返したものを " " 文字に置き換えました。

于 2008-10-09T16:59:33.400 に答える
1

パターンの代わりにこれを試してください:

EEE MM/d hh:mma

日付が 10/09 ではなく 10/9 であるため、違いはddouble ではなくsingle です。dd

于 2008-10-08T20:20:55.677 に答える