按时间顺序排序日期

时间:2012-10-12 09:33:17

标签: java android

朋友我有一个包含日期记录的字符串

String date=10-Oct-2012 @12-Oct-2012 @$12-Oct-2012 @12-Oct-2012 @$12-Sept-2012 13:50@12-Oct-2012 13:50@$12-Feb-2012 13:50@12-Oct-2012 13:50@$

List<Date> myList=new ArrayList<Date>() ;

我需要比较日期10-Oct-2012,12-OCt-2012,12-Sept-2012,12-Feb-2012,即每个奇怪的日期,以便我可以按时间顺序排列。我对此实施感到困惑,请提供指导/提示以解决问题。

在这种情况下,按时间顺序排列后的解决方案为12-Feb-2012 @12-Oct-2012 @12-Sept-2012 @12-Oct-2012 @$10-Oct-2012 @12-Oct-2012 @$12-Oct-2012 @12-Oct-2012

朋友们,为了解决这个问题,我创建了一个Hashmap,我计划将第一个日期保存为键,将整个String保存为值。

String[] tokens=date.split("\\$");
    demo[0]=demo[0].replaceAll("-", ".");
if(tokens.length>0)
        {
            for(int iTmp=tokens.length-1;iTmp>=0;iTmp--)
            {
                String []demo = tokens[iTmp].split("\\@");
                    demo[0] = demo[0].replace("Jan", "1")
                    .replace("Feb", "2").replace("March","3").replace("April","4").replace("May","5").replace("Jun","6").replace("July","7").replace("Aug","8")
                    .replace("Sept","9").replace("Oct","10").replace("Nov","11").replace("Dec","12");
                    demo[0]=demo[0]+" 00:05:00";
                    Date date1 = null;
                    SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yy");


                    try {
                        date1 = (Date)formatter.parse(demo[0]);

                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    myList.add(date1);
                    System.out.println("ADDED DATE IS"+date1);
                    //System.out.println("KEY VALUE PAIRS  "+key+"  "+tokens[iTmp]);
                }
            }
            System.out.println("READING LISTs");
            for(int iTmp=0;iTmp<myList.size();iTmp++)
            {

                System.out.println(myList.get(iTmp));
            }
            Collections.sort(myList);
            System.out.println("After Sorting");
            for(int iTmp=0;iTmp<myList.size();iTmp++)
            {

                System.out.println(myList.get(iTmp));
                System.out.println();
            } 

3 个答案:

答案 0 :(得分:3)

对我来说听起来很简单:

  • 将每个值解析为更合适的类型(CalendarDate,Joda Time的LocalDate
  • 按自然顺序排序

(使用Joda Time是IMO的首选选项,因为CalendarDate都不能真正代表“只是一个日期”;您必须将所有值放在同一时区等。 )

我肯定建议尝试将它们比作字符串。像往常一样,尽可能早地将数据转换为最适合的信息类型 -​​ 并尽可能将其转换为序列化表示(例如存储,传播到Web服务等)。

答案 1 :(得分:0)

拆分字符串然后

您可以使用格里高利历(内置)

或者您可以使用yoda-time库

我不能多说关于排序

答案 2 :(得分:0)

如果您正在为Android开发(您的问题上有Android标记),那么您应该了解Android SDK中的Time结构和方法。

如果可能的话,尝试使用您自己可以自然排序的日期/时间戳的字符串表示,例如RFC 3339格式(Android支持内置方法)。这将使您可以更轻松地使用字符串时间戳,并且还可以根据需要为您提供一种转换为规范或整数类型格式的简单方法。