Формат даты Android внутри ListView - PullRequest
3 голосов
/ 27 октября 2011

Благодаря Джулио Пьянкастелли Теперь у меня есть представление списка с возможностями нескольких строк.Теперь у меня проблема с форматированием даты во второй строке.Все даты одинаковы.В корме они разные.Мне нужно, чтобы кто-нибудь помог мне отформатировать даты в формате «День, Месяц, Год» (четверг, 27 октября 2011 г.).

Это код, который не работает :

 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

Если я удаляю свой предыдущий код даты, он работает нормально, но неправильно отформатирован.

Этот код работает, но отформатированнеправильно :

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

Мне нужен кто-то, чтобы помочь мне отформатировать даты в формате День, Месяц, Год (четверг, 27 октября 2011 г.).Спасибо!

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Проблема в том, что вы пытаетесь проанализировать строку с тем же шаблоном, который вы позже используете для форматирования . Вы должны проанализировать его с шаблоном, в котором он уже находится, который выглядит как «Пт, 21 октября 2011 12:00:00 по Гринвичу».

Так что я подозреваю, что вы хотите что-то вроде:

// 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);
}
1 голос
/ 27 октября 2011

EDIT:

Вам необходимо изменить эту строку:

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

Посмотрите на форматы, доступные для SimpleDateFormat. То, на что вы его измените, зависит от формата, который возвращается из RSS-канала, который вы используете.

Что ж, сегодня четверг, 27 октября 2011 года. Я думаю, что происходит то, что вы получаете ParseException, и, поскольку вы не обрабатываете его, ваш dateObj остается установленным на new Date(), что прямо сейчас.

Шаблон, в котором вы читаете, скорее всего неверен. (На самом деле это тот же формат, который вы хотите вывести, поэтому он кажется бессмысленным в том виде, в каком он есть.) Посмотрите на шаблон, поступающий из RSS-канала, и переоцените шаблон, который вы используете для разбора на Date объект.

Кроме того, вы, вероятно, захотите выбросить RuntimeException, если анализ не пройден, и не проглотить ParseException.

    try {
        dateObj = curFormater.parse(dateStr);
    } catch (ParseException e) {
        throw new RuntimeException("Couldn't parse dateStr: " + dateStr);
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...