web-dev-qa-db-ja.com

2つの日付を文字列形式で比較する方法は?

2つの日付を文字列形式で比較する最も簡単な方法は何ですか? date1は、後/前に来ますdate2

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

より一般的なアプローチとして、これらを両方とも定義済みフォーマットの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");
}
10

この場合、文字列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の前にある場合は負の値を返し、d1d2の後にある場合は正の値を返します。

4
Danil Gaponov

JodaTimeを使用すると、簡単に次のことができます。

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

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

それらを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は文字列です)。

3
i_am_zero

文字列を日付に変換するだけです:

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

次に、比較は次のように行われます:if(date1.after(date2)){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があります

1
LBes

はい、これを次のように比較できます。

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

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

if(date1.after(date2)){
    // statement
}
0
Abhijit Kumbhar