我想基于pubDate对多个RSS feed进行排序。但它会导致错误,因为它根据不同的日期格式进行排序。我有一个arraylist,其中包含所有RSS feed数据。从他们的发布我想要排序。主要问题是在arraylist中对多个日期格式进行排序。如下。
"EEE, dd MMM yyyy HH:mm:ss zzz","EEE MMM dd HH:mm:ss zzz yyyy"
如何根据pubdate对此arraylist进行排序。我也尝试了下面的内容,但是没有用。
Collections.sort(rssFeedArraylist, new Comparator<RssItem>() {
/* @Override
public int compare(RssItem lhs, RssItem rhs) {
SimpleDateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
try {
if (lhs.getPubDate() != null && rhs.getPubDate() != null) {
if (!lhs.getPubDate().equals("") && !rhs.getPubDate().equals("")) {
Date date1 = formatter.parse(rhs.getPubDate());
Date date2 = formatter.parse(lhs.getPubDate());
return date1.compareTo(date2);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}*/
@Override
public int compare(RssItem lhs, RssItem rhs) {
try {
if (lhs.getPubDate() != null && rhs.getPubDate() != null) {
if (!lhs.getPubDate().equals("") && !rhs.getPubDate().equals("")) {
//SimpleDateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
//DateFormat df = new SimpleDateFormat( "EEE MMM dd HH:mm:ss z yyyy", Locale.US);
SimpleDateFormat formatter = new SimpleDateFormat(isDateValid(rhs.getPubDate()), Locale.US);
SimpleDateFormat formatter1 = new SimpleDateFormat(isDateValid(lhs.getPubDate()), Locale.US);
Date date1 = formatter.parse(rhs.getPubDate());
Date date2 = formatter1.parse(lhs.getPubDate());
String dateRHS=isDateValid(rhs.getPubDate());
String dateLHS=isDateValid(lhs.getPubDate());
if(!dateRHS.contains(",")){
String str = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").format(date1);
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
date1=format.parse(str);
}
if(!dateLHS.contains(",")){
String str = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").format(date2);
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
date2=format.parse(str);
}
return date1.compareTo(date2);
}
}
} catch (ParseException e) {
String str=isDateValid(lhs.getPubDate());
String abc=lhs.getPubDate();
e.printStackTrace();
}
return 0;
}
public String isDateValid(String dateValue)
{
String returnVal = "";
/*String[] permissFormats = new String[]{"MM/dd/yyyy hh:mm:ss.sss","MM/dd/yyyy hh:mm:ss","yyyy-MM-dd hh:mm:ss.sss","yyyy-MM-dd hh:mm","dd/MM/yyyy",
"dd-MM-yyyy","MM-dd-yyyy","ddMMyyyy"};*/
String[] permissFormats = new String[]{"EEE, dd MMM yyyy HH:mm:ss zzz","EEE MMM dd HH:mm:ss zzz yyyy"};
SimpleDateFormat sdfObj = new SimpleDateFormat();
sdfObj.setLenient(false);
ParsePosition position = new ParsePosition(0);
for (int i = 0; i < permissFormats.length; i++)
{
if(dateValue.equals("Wed, 16 Nov 2016 22:06:47 GMT")){
Log.d("Date:","hello");
}
sdfObj.applyPattern(permissFormats[i]);
position.setIndex(0);
position.setErrorIndex(-1);
sdfObj.parse(dateValue, position);
if (position.getErrorIndex() == -1)
{
returnVal =permissFormats[i];
System.out.println("Looks like a valid date for Date Value :"+dateValue+": For Format:"+permissFormats[i]);
break;
}
else
{
System.out.println("Parse Failed Occured for Date Value :"+dateValue+":And Format:"+permissFormats[i]);
}
}
return returnVal;
}
});
rssFeedDataAdapter = new RssFeedDataAdapter(context, rssFeedArraylist, categoryName);
lvLIst.setAdapter(rssFeedDataAdapter);