2011-10-27 2 views
3

Merci à Giulio Piancastelli J'ai maintenant une vue de liste avec plusieurs capacités de ligne. Maintenant, j'ai un problème de formatage de la date sur la deuxième ligne. Toutes les dates sont les mêmes. Dans le flux, ils sont différents. J'ai besoin de quelqu'un pour m'aider à formater mes dates au format Jour, Mois, Année (jeudi 27 octobre 2011).Format de date Android à l'intérieur de ListView

C'est le code qui ne fonctionne pas: Si je retire mon précédent code de date

List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 
    for (RSSItem item : feed.getAllItems()) { 
     Map<String, String> datum = new HashMap<String, String>(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

il fonctionne très bien, mais est formaté de manière incorrecte.

Ce code fonctionne, mais est formaté correctement:

List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 
    for (RSSItem item : feed.getAllItems()) { 
     Map<String, String> datum = new HashMap<String, String>(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

je formate besoin de quelqu'un pour me aider mes dates au format jour, mois, année (jeudi, Octobre 27, 2011). Je vous remercie!

+0

Donc, fondamentalement, vous voulez vous débarrasser de la partie 12:00:00 GMT? –

+0

Je veux que la date lise Jour, Mois, Année. Comme ça: jeudi 27 octobre 2011 –

+0

Ce n'est pas ce que vous désirez ce que nous voyons dans la première capture d'écran? –

Répondre

4

Le problème est que vous essayez de Parse la chaîne avec le même motif que vous êtes plus tard en utilisant le format de il. Vous devriez l'analyser avec le modèle dans lequel il est déjà, qui ressemble à "Fri, 21 Oct 2011 12:00:00 GMT" apparemment.

Je suppose que vous voulez quelque chose comme:

// 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<String, String> datum = new HashMap<String, String>(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); 
} 
+0

Je frappe la déclaration catch à chaque fois maintenant. Comment puis-je résoudre ce problème? –

+0

@Callalleres: Accrochez-vous - J'ai juste remarqué que j'avais trop de virgules. Essayez maintenant - J'ai légèrement modifié le modèle d'analyse. –

+0

Ça se passe encore. –

1

EDIT:

Vous devez modifier cette ligne:

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

Jetez un oeil sur les formats disponibles à SimpleDateFormat. Ce que vous modifiez dépend du format renvoyé par le flux RSS que vous utilisez.

Eh bien, ce jeudi 27 Octobre 2011. Je pense que ce qui se passe est que vous obtenez un ParseException, et puisque vous n'êtes pas manipuler, votre dateObj reste à l'état new Date(), qui est en ce moment.

Le motif que vous lisez est probablement incorrect. (Il est en fait le même que le format que vous voulez produire, donc il semble inutile comme ça.) Jetez un coup d'oeil au modèle qui vient du flux RSS et réévaluez le modèle que vous utilisez pour analyser un objet Date .

En outre, vous souhaitez probablement lancer un RuntimeException si l'analyse échoue et ne pas avaler le ParseException.

try { 
     dateObj = curFormater.parse(dateStr); 
    } catch (ParseException e) { 
     throw new RuntimeException("Couldn't parse dateStr: " + dateStr); 
    } 
+0

Comment puis-je résoudre ce problème? –