0

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

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[] 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();
            } 
4

3 回答 3

3

对我来说这听起来很简单:

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

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

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

于 2012-10-12T09:35:59.170 回答
0

拆分字符串,然后

您可以使用公历日历(内置)

或者你可以使用 yoda-time 图书馆

我不能说更多关于排序的事情

于 2012-10-12T09:35:24.247 回答
0

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

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

于 2012-10-12T09:49:19.773 回答