java字符串日期排序比较问题

String s1="2012-4-4";
String s2="2013-3-3"
我想用split("-");,然后怎么比较;
第二个转为Date 怎么比较?

排序么?

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

public class Test {
    public static void main(String args[]) {

        System.out.println("字符串比较");
        test1();
        System.out.println("Date比较");
        test2();
    }

    private static void test1() {
        List<String> data = init();

        System.out.println("排序前" + data);

        Collections.sort(data, new Comparator<String>() {

            public int compare(String o1, String o2) {

                String[] arr1 = o1.split("_");
                String[] arr2 = o2.split("_");

                int comparator = toInt(arr1[0], -1) - toInt(arr2[0], -2);

                if (comparator == 0) {
                    comparator = toInt(arr1[1], -1) - toInt(arr2[1], -2);
                    if (comparator == 0) {
                        return toInt(arr1[2], -1) - toInt(arr2[2], -2);
                    }
                }
                return comparator;
            }
        });
        System.out.println("排序后" + data);
    }

    private static void test2() {
        List<String> data = init();
        System.out.println("排序前" + data);

        final Format f = new SimpleDateFormat("yyyy-MM-dd");
        Collections.sort(data, new Comparator<String>() {

            public int compare(String o1, String o2) {

                Date d1;
                Date d2;
                try {
                    d1 = (Date) f.parseObject(o1);
                    d2 = (Date) f.parseObject(o2);
                    return d1.compareTo(d2);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return 0;
            }
        });
        System.out.println("排序后" + data);
    }

    private static List<String> init() {

        List<String> data = new ArrayList<String>();
        data.add("2013-3-3");
        data.add("2012-4-4");
        return data;
    }

    private static int toInt(String str, int delVal) {
        try {
            return Integer.parseInt(str);
        } catch (Exception e) {
            return delVal;
        }
    }

}

字符串比较
排序前[2013-3-3, 2012-4-4]
排序后[2012-4-4, 2013-3-3]
Date比较
排序前[2013-3-3, 2012-4-4]
排序后[2012-4-4, 2013-3-3]

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-01
格式一样的自己比较字符串即可
第2个回答  2013-08-01
SimpleDateFormat 转成Date

Date.before(Date)
Date.after(Date)

import java.util.*;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class DateCompare{
public static void main(String [] argv)throws ParseException{
String s1="2012-4-4";
String s2="2013-3-3";
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-M-d");
Date d1=fmt.parse(s1);
Date d2=fmt.parse(s2);
if(d2.after(d1)){
System.out.println(s2+">"+s1);
}else{
System.out.println(s2+"!>"+s1);
}
}
}追问

用split呢?

追答

那样太费劲了,split 。

追问

嗯,但是我需要写在public int compare (){} 里面,这里需要一个返回值,如果谁大返回1,小的返回-1.而Date又要抛异常,我不会了

追答

异常应该继续抛出,让上层应用决定如何处理,因为上层传入的参数有问题,才会抛出异常的。

/**
dateStr2日期大于dateStr1,返回1;
相等返回0;
dateStr1日期大于dateStr2,返回-1;
*/

public static void main(String dateStr1, String dateStr2)throws ParseException{
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-M-d");

Date d1=fmt.parse(dateStr1);
Date d2=fmt.parse(dateStr2);
return d2.compareTo(d1);
}

第3个回答  推荐于2018-03-13
package com.zz;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Demo4 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "2012-4-4";
String s2 = "2013-3-3";
Demo4 demo4 = new Demo4();
int result = demo4.compare(s1, s2);
System.out.println(result);
}

public int compare(String s1, String s2) {
boolean flag = false;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd",
Locale.CHINA);
try {
Date d1 = simpleDateFormat.parse(s1);
Date d2 = simpleDateFormat.parse(s2);
if (d1.getTime() > d2.getTime()) {
flag = true;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (flag) {
return 1;
} else {
return -1;
}
}

}

ps:split就不要用了。这是在自虐。本回答被提问者和网友采纳