2017-04-14 3 views
6

種類が異なる2つのオブジェクトの日付を比較しようとしています。カレンダーオブジェクトをLocalDaterに変換する方法はありますか?LocalDateとCalendarクラスのオブジェクトを比較するには?

ありがとうございました:)

public class ABC{ 

    public static void main(String args[]){ 
     Calendar c1= Calendar.getInstance(); 
     LocalDate c2= LocalDate.now();  
     System.out.println(c1.compareTo(c2)); 
    } 
} 
+0

あなたはそれらの年、月、日の値を比較してみましたか? – VGR

+0

キャストはどうですか? CalendarがLocalDateとviceversaから拡張されていないので、私はそれが動作するかどうかはわかりません。 – HessianMad

+0

@HessianMadキャストはここでは機能しません。 –

答えて

2

あなたは日付を比較するので、ちょうどそれを行うようにする必要があります。参考としてthis answerを使用して

Calendar calendar = Calendar.getInstance(); 
LocalDate localDate = LocalDate.now(); 

LocalDate calendarAsLocalDate = calendar.toInstant() 
    .atZone(calendar.getTimeZone().toZoneId()) 
    .toLocalDate(); 

return calendarAsLocalDate.compareTo(localDate) 
+0

ZoneId.systemDefault()を 'calendar.getTimeZone()。toZoneId()'に置き換える必要があります。これにより、すべてのCalendarオブジェクトを正しく処理することが保証されます。 – VGR

+0

@VGRありがとう、私はそれを修正しました。 –

1
private int compare(Calendar c1, LocalDate c2) { 
     int yearCompare = ((Integer) c1.get(Calendar.YEAR)).compareTo(c2.getYear()); 
     if (yearCompare == 0) 
      return ((Integer) c1.get(Calendar.DAY_OF_YEAR)).compareTo(c2.getDayOfYear()); 
     else 
      return yearCompare; 
    } 
+0

int値を単純に差し引いて比較することができます。たとえば、 'int yearCompare = c1.get(Calendar.YEAR) - c2.getYear();'。これは、整数のオーバーフローがあっても、2の補数表現の性質のために機能します。 – VGR

関連する問題