如何在Android或Java中对从当前日期到旧日期的日期进行排序?
我需要用户定义的function,可以将日期从当前时间排序到旧时间。
我有10个日期的列表,我想从上次最近的日期开始对这些日期进行排序。
目前我有一个逻辑,如果我们可以用毫秒来转换日期,那么将它与当前毫秒相比较,最小毫秒将是最近的日期。 那是,
CURRENT_MILLI_SECOND - A_DATE_CONVERTED_TO_MILLI_SECONDS = MILLI-SECONDS
请建议我,如果有人可以帮助我这个逻辑或任何其他逻辑… !!!
这是我从服务器获得的结果:
Thu Dec 27 11:02:43 GMT+05:30 2012
您可以使用Comparator并使用compare()对数据进行排序
Collections.sort(dateList, new Comparator(){ public int compare(Date date1, Date date2){ return date1.after(date2); } });
尝试这个:
Comparator date_comparator = new Comparator() { @Override public int compare(Date date1, Date date2){ return date1.compareTo(date2); } };
您可以使用Calendar
或Date
类来执行此操作。 使用日历和日期,您可以比较两个日期,如date1.compare(date2)或date.before(date2)或date1.after(date2)这样的api可用于您的情况。
Java中的Date和Calendar类已经有一个很好的API来比较日期。
您可以使用它来编写自己的函数来排序日期。
你可以参考这个链接 。
TL;博士
Collections.reverse( new ArrayList<>().add( OffsetDateTime.parse( "Thu Dec 27 11:02:43 GMT+05:30 2012" , DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss OOOO uuuu" , Locale.US ) ) ) )
java.time
现代方法使用java.time类。
定义要匹配的格式模式。 顺便说一句,这是一种可怕的格式; 如果您有任何控制,请使用标准ISO 8601格式。
String input = "Thu Dec 27 11:02:43 GMT+05:30 2012" ; DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss OOOO uuuu" , Locale.US );
您的输入字符串指定从UTC的偏移量而不是全时区域。 所以我们解析为OffsetDateTime
。
OffsetDateTime odt = OffsetDateTime.parse( input , f );
odt.toString():2012-12-27T11:02:43 + 05:30
OffsetDateTime
对象已经知道如何对自己进行排序 ,因为它们实现了Comparable
。
List< OffsetDateTime > odts = new ArrayList<>( 3 ) ; odts.add( odt ) ; odts.add( odt.plusMinutes( 7 ) ) ; odts.add( odt.minusMinutes( 21 ) ) ; Collections.sort( odts ) ;
您希望列表顶部有最新的,因此按相反的顺序排序 。
Collections.reverse( odts ) ; // Reverse-order.
要比较单个java.time对象,请调用isBefore
, isAfter
和isEqual
/ equals
方法。
thisOdt.isBefore( thatOdt )
关于java.time
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。
从哪里获取java.time类?
- Java SE 8 , Java SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和Java SE 7
- 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
- Android的
- 更高版本的Android捆绑java.time(JSR 310)类的实现。
- 对于早期的Android, ThreeTenABP项目采用ThreeTen-Backport (如上所述)。 请参见如何使用ThreeTenABP ….