如何比较字符串格式的两个日期?

How to compare two dates in String format?

比较字符串格式的两个日期最简单的方法是什么?我需要知道 date1 是否出现 after/before date2.

String date1 = "2015-12-01";
String date2 = "2015-12-31";

在这种情况下,您可以只比较字符串 date1.compareTo(date2)

编辑:但是,正确的方法是使用 SimpleDateFormat:

DateFormat f = new SimpleDateFormat("yyyy-mm-dd");
Date d1 = f.parse(date1, new ParsePosition(0));
Date d2 = f.parse(date2, new ParsePosition(0));

然后比较日期:

d1.compareTo(d2);

如果 d1d2 之前,比较将 return 为负值,如果 d1d2 之后,则为正值。

对于更通用的方法,您可以将它们都转换为定义格式的 Date 对象,然后使用适当的方法:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

Date date1 = format.parse(date1);
Date date2 = format.parse(date2);

if (date1.compareTo(date2) <= 0) {
    System.out.println("earlier");
}

使用 JodaTime,只需:

DateTime d1 = DateTime.parse(date1);
DateTime d2 = DateTime.parse(date2);

Assert.assertTrue(d1.isBefore(d2));
Assert.assertTrue(d2.isAfter(d1));

您可以简单地将字符串转换为日期:

Date date1 = sdf.parse("2015-12-01");
Date date2 = sdf.parse("2010-01-01");

然后比较是这样完成的: 如果(date1.after(日期 2)){ System.out.println("Date1 is after Date2"); }

if(date1.before(date2)){
            System.out.println("Date1 is before Date2");
}

if(date1.equals(date2)){
            System.out.println("Date1 is equal Date2");
}

如果我没记错的话,有一个 ParseException 需要处理

是的,你可以这样比较:

Date date1 = new Date();
Date date2 = new Date();

if(date1.before(date2)){
    // statement
}

if(date1.after(date2)){
    // statement
}

我建议您将它们转换为 Date 个对象。

String date1 = "2015-12-01";
String date2 = "2015-12-31";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.parse(date1).before(sdf.parse(date2)));

像这样比较它们:

if(date2 .compareTo(date1) > 0){
    System.out.println(" ---- ");
}

不是一个理想的选择(date1 和 date2 是字符串),因为它失去了灵活性并可能导致它自己的问题。