2017-04-14 27 views
6

我想比较具有不同类型的两个对象的日期。有没有办法将Calendar对象转换为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 Cast在这里不起作用。 –

回答

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

您应该用'calendar.getTimeZone()。toZoneId()'替换ZoneId.systemDefault(),以保证转换正确处理每个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();'。由于二进制补码表示的性质,即使在存在整数溢出时也是如此。 – VGR