Благодаря Джулио Пианкастелли Теперь у меня есть просмотр списка с несколькими возможностями линии. Теперь у меня проблема с форматированием даты на второй строке. Все даты одинаковы. В корме они разные. Мне нужен кто-то, кто поможет мне форматировать даты в формате «День», «Месяц», «Год» (четверг, 27 октября 2011 г.).
Это код, который не работает :
List
Если я удалю свой предыдущий код даты, он отлично работает, но отформатирован неправильно.
Этот код работает, но отформатирован неправильно :
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);
Мне нужен кто-то, кто поможет мне форматировать даты в формате «День», «Месяц», «Год» (четверг, 27 октября 2011 г.). Спасибо!
Проблема в том, что вы пытаетесь выполнить parse строку с тем же шаблоном, который вы позже используете в формате . Вы должны разобрать его с шаблоном, в котором он уже находится, что похоже на «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);
}
EDIT:
Вам нужно изменить эту строку:
SimpleDateFormat curFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy");
Взгляните на форматы, доступные для SimpleDateFormat
. То, что вы меняете, зависит от формата, который возвращается из корма RSS, который вы потребляете.
Итак, сегодня четверг, 27 октября 2011 года. Я думаю, что происходит то, что вы получаете ParseException
, и поскольку вы не обрабатываете его, ваш dateObj
остается установленным к новой Date ()
, которая находится прямо сейчас.
Образец, который вы читаете, скорее всего, неверен. (На самом деле это то же самое, что и формат, который вы хотите вывести, поэтому кажется бессмысленным, как оно есть.) Взгляните на шаблон, входящий в RSS-канал, и переоцените шаблон, который вы используете, для анализа в Дата
.
Кроме того, вы, вероятно, захотите выбросить RuntimeException
, если синтаксический анализ завершится с ошибкой, а не проглотить ParseException
.
try {
dateObj = curFormater.parse(dateStr);
} catch (ParseException e) {
throw new RuntimeException("Couldn't parse dateStr: " + dateStr);
}