ListView内のAndroid日付形式

Giulio Piancastelli のおかげで、複数のライン機能を持つリストビューが完成しました。今、私は2行目の日付の書式設定に問題があります。すべての日付は同じです。飼料には違いがあります。日、月、年(2011年10月27日(木))の形式で日付をフォーマットするのに役立つ人が必要です。

これはうまくいかないコードです:

 List> data = new ArrayList>(); for (RSSItem item : feed.getAllItems()) { Map datum = new HashMap(2); datum.put("title", item.getTitle()); String dateStr = item.getPubDate(); SimpleDateFormat curFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy"); Date dateObj = new Date(); try { dateObj = curFormater.parse(dateStr); } catch (ParseException e) { //TODO Auto-generated catch block e.printStackTrace(); } SimpleDateFormat postFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy"); String newDateStr = postFormater.format(dateObj); datum.put("date", newDateStr); data.add(datum); } SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "date"}, new int[] {android.R.id.text1, android.R.id.text2}); itemlist.setAdapter(adapter); itemlist.setOnItemClickListener(this); itemlist.setSelection(0); 

Repeating date

以前の日付コードを削除してもうまく動作しますが、フォーマットが間違っています。

このコードはうまくいきますが、フォーマットは間違っています

List> data = new ArrayList>(); for (RSSItem item : feed.getAllItems()) { Map datum = new HashMap(2); datum.put("title", item.getTitle()); datum.put("date", item.getPubDate().toString()); data.add(datum); } SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "date"}, new int[] {android.R.id.text1, android.R.id.text2}); itemlist.setAdapter(adapter); itemlist.setOnItemClickListener(this); itemlist.setSelection(0); 

incorrect date format

日、月、年(2011年10月27日(木))の形式で日付をフォーマットするのに役立つ人が必要です。ありがとうございました!

3
ですから、基本的に12:00:00 GMTの部分を取り除きたいのですか?
追加された 著者 coder_For_Life22,
これは、データをどのように解析し、変数に設定し、それをリストビューのTextViewに設定するかという問題があることを意味します。
追加された 著者 coder_For_Life22,
あなたのDATE変数が何であってもログを記録し、それぞれの結果がどのようなものであるかを確認することをお勧めします。あなたのループの中に入れるか、フィードを使用しているものをリストビューに入れてください。
追加された 著者 coder_For_Life22,
@CKallemeres:最初のスクリーンショットを作成するコードのログに、各アイテムのスタックトレースがあることを強く疑う。利用可能な診断ツールを使用することを学ぶ必要があります。間違ったフォーマットを使用しているため、基本的に解析が失敗しています。あなたが気づくなら、あなたが見る必要のある範囲を大幅に減らすことができました。
追加された 著者 Jon Skeet,
私たちが最初のスクリーンショットで見ているものがあなたが望むものではありませんか?
追加された 著者 nicholas.hauschild,
だから最初の形式からフォーマットが必要ですが、すべての日付は異なるはずですか?
追加された 著者 nicholas.hauschild,
日にち、月、年を読みたい。このように:2011年10月27日(木)
追加された 著者 Courtney Stephenson,
最初のスクリーンショットでは、すべての日付が同じ値を読み取ります。クラスが読み込んでいるフィードでは、2番目のスクリーンショットに示すように、すべての項目で同じではありません。
追加された 著者 Courtney Stephenson,

2 答え

問題は、書式設定するために使用するのと同じパターンで文字列を解析しようとしていることです。あなたはそれがすでにあるパターンで解析するべきです、明らかに "Fri、21 Oct 2011 12:00:00 GMT"のように見えます。

だから私はあなたが何かが欲しいと思う:

// You probably actually want to set the time zone of the
// formatting pattern - but you'll need to think what time zone you
// really want. We don't know enough to say. Ditto the locale...
private static final DateFormat PARSING_PATTERN = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); 
private static final DateFormat FORMATTING_PATTERN = 
    new SimpleDateFormat("EEEE, MMMM dd, yyyy"); 

...

for (RSSItem item : feed.getAllItems()) {
    Map datum = new HashMap(2);
    datum.put("title", item.getTitle());

    String outputDate;
    try {
       Date date = PARSING_PATTERN.parse(item.getPubDate());
       outputDate = FORMATTING_PATTERN.format(date);
    } catch (ParseException e) {
       outputDate = "Invalid date";//Or whatever...
    } 
    datum.put("date", outputDate);
    data.add(datum);
}
4
追加された
@CKallemeres:ハングアップ - 私はちょうど私があまりにも多くのカンマを持っていたことを発見した。今すぐ試してください - 解析パターンを少し変更しました。
追加された 著者 Jon Skeet,
@CKallemeres:もう一度編集しました。米国のロケールを明示的に使用し、日と月の順序を修正しました。しかし、正直言って、あなた自身のことを少しでも働かせるべきだったはずです - Stack Overflowは救いの手であることを意図しています。自分で解決できるようにソリューションを理解する必要があります。私が提示したコードを理解していますか? PARSING_PATTERNが入力データと一致している必要があることを理解していますか?
追加された 著者 Jon Skeet,
@CKallemeres:あなたは今理解していますか?あなたは1つのパターン(たとえば、「Thu、2011年10月27日GMT」)から別のパターン(たとえば、「2011年10月27日木曜日」)に変更しようとしています。
追加された 著者 Jon Skeet,
私は毎回catchステートメントを打つ。この問題をどうやって解決するのですか?
追加された 著者 Courtney Stephenson,
それはまだ起こっている。
追加された 著者 Courtney Stephenson,
コードの仕組みを理解し始めています。私はプログラミングが初めてで、このサイトは、どのように動作するかを理解するのに役立つ最高のものです。 PARSING_PATTERNがFORMATTING_PATTERNと異なる必要がある理由は、私を混乱させる部分です。
追加された 著者 Courtney Stephenson,
今、私は分かる。私に辛抱強くご協力いただきありがとうございました。
追加された 著者 Courtney Stephenson,

EDIT:

この行を変更する必要があります:

SimpleDateFormat curFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy");

SimpleDateFormat で使用できる形式を見てください。/code> これを変更する内容は、使用しているRSSフィードから返される形式に依存します。

さて、今日は2011年10月27日木曜日です。私は、あなたが ParseException を取得していて、あなたがそれを処理していないので、あなたの dateObj new Date()に変更してください。

あなたが読み込んでいるパターンが正しくない可能性があります。 (実際には出力したい書式と同じですので、意味が分かりません)RSSフィードから入ってきたパターンを見て、に解析するパターンを再評価してください> Date オブジェクトを作成します。

また、解析が失敗した場合に RuntimeException をスローし、 ParseException を取り込まないようにすることもできます。

    try {
        dateObj = curFormater.parse(dateStr);
    } catch (ParseException e) {
        throw new RuntimeException("Couldn't parse dateStr: " + dateStr);
    } 
1
追加された
これをどうやって解決するのですか?
追加された 著者 Courtney Stephenson,