如何从RSS提要中解析和排序多个日期格式?

时间:2017-01-31 09:26:48

标签: android sorting xml-parsing rss date-format

我想基于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);

0 个答案:

没有答案