日期排序!请各位帮助!

月光下的大D丶 2017-06-22 05:13:04
package testData;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;


public class Cqiuzhu {

public static void main(String[] args) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<PersonOrderEntity> lists = new ArrayList<>();
PersonOrderEntity personOrderEntity1 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity2 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity3 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity4 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity5 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity6 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity7 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity8 = new PersonOrderEntity();
PersonOrderEntity personOrderEntity9 = new PersonOrderEntity();
String s1 = "2017-06-01 23:59:00";
Date parse1 = format.parse(s1);

String s2 = "2017-06-01 11:31:43";
Date parse2 = format.parse(s2);

String s3 = "2017-12-01 01:31:43";
Date parse3 = format.parse(s3);

String s4 = "2017-12-10 02:31:43";
Date parse4 = format.parse(s4);

String s5 = "2017-12-20 03:31:43";
Date parse5 = format.parse(s5);

String s6 = "2017-12-30 04:31:43";
Date parse6 = format.parse(s6);

String s7 = "2016-12-30 04:31:43";
Date parse7 = format.parse(s7);

String s8 = "2015-12-30 04:31:43";
Date parse8 = format.parse(s8);

String s9 = "2015-05-30 04:31:43";
Date parse9 = format.parse(s9);

personOrderEntity9.setCreatetime(parse9);
personOrderEntity6.setCreatetime(parse6);
personOrderEntity1.setCreatetime(parse1);
personOrderEntity7.setCreatetime(parse7);
personOrderEntity4.setCreatetime(parse4);
personOrderEntity2.setCreatetime(parse2);
personOrderEntity3.setCreatetime(parse3);
personOrderEntity5.setCreatetime(parse5);
personOrderEntity8.setCreatetime(parse8);

lists.add(personOrderEntity9);
lists.add(personOrderEntity3);
lists.add(personOrderEntity6);
lists.add(personOrderEntity2);
lists.add(personOrderEntity4);
lists.add(personOrderEntity5);
lists.add(personOrderEntity8);
lists.add(personOrderEntity7);
lists.add(personOrderEntity1);

Map<String, List<PersonOrderEntity>> test = test(lists);
Iterator<Map.Entry<String, List<PersonOrderEntity>>> it = test.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, List<PersonOrderEntity>> entry = it.next();
List<PersonOrderEntity> value = entry.getValue();
for (int i = 0; i <value.size() ; i++) {
Date createtime = value.get(i).getCreatetime();
String format1 = format.format(createtime);
System.out.println(format1);
}
System.out.println("key= " + entry.getKey());
}
}



public static Map<String,List<PersonOrderEntity>> test(List<PersonOrderEntity> lists) throws ParseException {
Map<String,List<PersonOrderEntity>> map = new HashMap<>();
List<PersonOrderEntity> list = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
Calendar thiscalendar = Calendar.getInstance();
int thisyear = thiscalendar.get(Calendar.YEAR);
ListSort(lists);
for (int i = 0; i <lists.size(); i++) {
Date time = lists.get(i).getCreatetime();
calendar.setTime(time);
int month = calendar.get(Calendar.MONTH) + 1;
int year = calendar.get(Calendar.YEAR);
for (int x = 1990 ;x<thisyear+1;x++){
if (x == year){
for (int j = 1; j <13 ; j++) {
if (month==j){
list.add(lists.get(i));
map.put(x+"-"+j,list);
}
}
}
}
}
return map;
}


private static void ListSort(List<PersonOrderEntity> list) {
Collections.sort(list, new Comparator<PersonOrderEntity>() {
@Override
public int compare(PersonOrderEntity o1, PersonOrderEntity o2) {
Date dt1 = o1.getCreatetime();
Date dt2 = o2.getCreatetime();
if (dt1.getTime() > dt2.getTime()) {
return -1;
} else if (dt1.getTime() < dt2.getTime()) {
return 1;
} else {
return 0;
}
}
});
}

public static class PersonOrderEntity{
private Date createtime;

public Date getCreatetime() {
return createtime;
}

public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
}

}


最后输出的是这个。和我想的不太一样,我觉得应该是循环添加list的时候出错了,但是我没有找到错误的原因
2017-12-30 04:31:43
2017-12-20 03:31:43
2017-12-10 02:31:43
2017-12-01 01:31:43
2017-06-01 23:59:00
2017-06-01 11:31:43
2016-12-30 04:31:43
2015-12-30 04:31:43
2015-05-30 04:31:43
key= 2017-6
2017-12-30 04:31:43
2017-12-20 03:31:43
2017-12-10 02:31:43
2017-12-01 01:31:43
2017-06-01 23:59:00
2017-06-01 11:31:43
2016-12-30 04:31:43
2015-12-30 04:31:43
2015-05-30 04:31:43
key= 2016-12
2017-12-30 04:31:43
2017-12-20 03:31:43
2017-12-10 02:31:43
2017-12-01 01:31:43
2017-06-01 23:59:00
2017-06-01 11:31:43
2016-12-30 04:31:43
2015-12-30 04:31:43
2015-05-30 04:31:43
key= 2017-12
2017-12-30 04:31:43
2017-12-20 03:31:43
2017-12-10 02:31:43
2017-12-01 01:31:43
2017-06-01 23:59:00
2017-06-01 11:31:43
2016-12-30 04:31:43
2015-12-30 04:31:43
2015-05-30 04:31:43
key= 2015-12
2017-12-30 04:31:43
2017-12-20 03:31:43
2017-12-10 02:31:43
2017-12-01 01:31:43
2017-06-01 23:59:00
2017-06-01 11:31:43
2016-12-30 04:31:43
2015-12-30 04:31:43
2015-05-30 04:31:43
key= 2015-5


理想结果:
2017-12-30 04:31:43
2017-12-20 03:31:43
2017-12-10 02:31:43
2017-12-01 01:31:43
key= 2017-12

2017-06-01 23:59:00
2017-06-01 11:31:43
key= 2017-6

2016-12-30 04:31:43
key= 2016-12

2015-12-30 04:31:43
key= 2015-12

2015-05-30 04:31:43
key= 2015-5

本人是个新手,也是没辙了,真的很焦急,希望各位能赐教一下,不胜感激,100分奉上。。再次感谢
...全文
223 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
我爱娃哈哈 2017-06-25
  • 打赏
  • 举报
回复
对象可以直接存Date的getTime, 这样返回的一个long值也好比较
MikeDDT009 2017-06-22
  • 打赏
  • 举报
回复
Timestamp.valueof("2003-10-10 12:00:00").getTime() 百度了下查到,直接把时间的字符串形式转换距离1970.1.1这个日期的毫秒时间,返回值是个整数,可以直接比较
鱿鱼ing 2017-06-22
  • 打赏
  • 举报
回复
没看你的具体实现,但是感觉在PersonOrderEntity里重写日期字段的比较方法稳一点

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧