【问题标题】:Sorting by Time the posts from 2 or more different sources按时间排序来自 2 个或更多不同来源的帖子
【发布时间】:2014-08-22 19:15:05
【问题描述】:

我正在用 java 开发一个适用于 android 的应用程序。

我从有帖子的网站获得了 1、2、3 个或更多来源。

您可以认为我正在获取 3 个不同的 RSS 提要并将它们添加到一个页面中。 问题是我想以正确的时间安排将它们添加到网格视图中。 我的意思是如果在下面创建的帖子 22/08/2014 12:00 - 第一个帖子第一个来源 22/08/2014 12:05 - 第一个帖子第三个来源 22/08/2014 9:00 - 第一个帖子第二个来源。 . . .

排列应该是(最新的帖子应该在顶部)

-第二个来源第一个帖子 -第一个来源第一个帖子 -第三来源第一篇文章 还有更多应该这样排序。 . . .

         public static class SortFeedByDate implements Comparator<DoFeed_Item> {


            @Override
            public int compare(DoFeed_Item lhs, DoFeed_Item rhs) {


                if (lhs.getTimePosted() != null || rhs.getTimePosted() != null)
                {
                Calendar c1 = Calendar.getInstance();
                c1.setTime(lhs.getTimePosted());
                c1.set(Calendar.HOUR, 0);
                c1.set(Calendar.MINUTE, 0);
                c1.set(Calendar.SECOND, 0);
                c1.set(Calendar.MILLISECOND, 0);
                Date t1 = c1.getTime();
                c1.setTime(rhs.getTimePosted());
                c1.set(Calendar.HOUR, 0);
                c1.set(Calendar.MINUTE, 0);
                c1.set(Calendar.SECOND, 0);
                c1.set(Calendar.MILLISECOND, 0);
                Date t2 = c1.getTime();

                if(t2.compareTo(t2) != 0)
                    return t2.compareTo(t1)*-1;
                else{
                    c1.setTime(lhs.getTimePosted());
                    c1.set(Calendar.YEAR, 0);
                    c1.set(Calendar.MONTH, 0);
                    c1.set(Calendar.DATE, 0);
                    t1 = c1.getTime();
                    c1.setTime(rhs.getTimePosted());
                    c1.set(Calendar.YEAR, 0);
                    c1.set(Calendar.MONTH, 0);
                    c1.set(Calendar.DATE, 0);
                    t2 = c1.getTime();
                    return t2.compareTo(t1);

            }
                }
                return 0;

             }
         }

这是我用来按时间比较项目的课程

DoFeed_Item 是我的帖子。我正在从源获取帖子,我正在向 DoFeed_Item 添加所需的部分,我正在将每个 DoFeed_Item 添加到一个数组中,然后是 listview 的适配器..

DoFeed_Item 如下例所示

new DoFeed_Item(String postTitle,Date postCreated,String urlOfArticle)

不同的来源发送不同的时间表。

如果它发送时间戳 我正在像这样转换时间

Date date = new Date(createdAt*1000);

如果以特定时间日期格式发送

我正在像这样将时间转换为日期

部分 yyyy-MM-dd 或其他内容会因特定 rss 提要而改变。

SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");  

                        Date date = null;
                        try {
                            date = format.parse(createdTime);
                        } catch (ParseException e) {
                            Log.e("DoDate","Date parse error : "+ e);

                        }  

我正在以正确的时间安排添加它们,如下所示:

 Collections.sort(FeedItemList, new SortFeedByDate());

 //feed is gridview                         
feed.setAdapter(new NewsAdaptor(mLauncher, FeedItemList));

问题是,一切都像随机一样放置到 gridview ...... 时间和日期没有按预期工作。

我错过了什么吗?像格林威治标准时间的东西或其他东西..

还是比较器错了?

如果您需要有关代码或其他任何信息的更多信息,请告诉我。我会提供所需的东西。

【问题讨论】:

  • 你想通过以下行中的 t2 与自身进行比较来实现什么:if(t2.compareTo(t2) != 0)。
  • @VaibhavRaj 嗯,可能我在那里弄错了。我会检查并修复它,让你知道它是否解决了我的问题

标签: java android date gridview comparator


【解决方案1】:

假设您正确解析了日期,您可以简单地执行以下操作,而不是转换为日历:

@Override
public int compare(DoFeed_Item lhs, DoFeed_Item rhs) 
{
    return lhs.getTimePosted().compareTo(rhs.getTimePosted());
}

http://docs.oracle.com/javase/7/docs/api/java/util/Date.html#compareTo%28java.util.Date%29

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多