我正在用java开发一个android应用程序。
我从有帖子的网站获得 1、2、3 或更多来源。
您可以认为我正在获取 3 个不同的 rss 提要并将它们添加到一个页面中。 问题是我想以正确的时间安排将它们添加到 GridView 中。 我的意思是如果帖子是在下面创建的 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;
}
}
这是我用来按时间比较项目的类(class)
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 feed 进行更改。
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 中...... 时间和日期未按预期工作。
我错过了什么吗?比如 GMT 时间或者其他什么东西..
还是比较器错误?
如果您需要有关代码或其他任何内容的更多信息,请告诉我。我会提供需要的东西。
最佳答案
假设您正确解析了日期,您可以简单地执行以下操作,而不是转换为日历:
@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
关于java - 按时间对来自 2 个或更多不同来源的帖子进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25454064/