如何比较 LocalDate 和 Calendar 类的对象?
Posted
技术标签:
【中文标题】如何比较 LocalDate 和 Calendar 类的对象?【英文标题】:How to compare objects of LocalDate and Calendar class? 【发布时间】:2017-09-10 18:55:34 【问题描述】:我正在尝试比较两个具有不同类型的对象的日期。有没有办法将 Calendar 对象转换为 LocalDater 或反之亦然?
谢谢你:)
public class ABC
public static void main(String args[])
Calendar c1= Calendar.getInstance();
LocalDate c2= LocalDate.now();
System.out.println(c1.compareTo(c2));
【问题讨论】:
你试过比较他们的年月日值吗? 做演员怎么样?我不确定它是否会起作用,因为 Calendar 不会从 LocalDate 扩展,反之亦然。 @HessianMad Cast 在这里不起作用。 【参考方案1】:您需要比较日期,所以我们就这样做吧。
使用this answer 作为参考:
Calendar calendar = Calendar.getInstance();
LocalDate localDate = LocalDate.now();
LocalDate calendarAsLocalDate = calendar.toInstant()
.atZone(calendar.getTimeZone().toZoneId())
.toLocalDate();
return calendarAsLocalDate.compareTo(localDate)
【讨论】:
您应该将 ZoneId.systemDefault() 替换为calendar.getTimeZone().toZoneId()
,以保证转换正确处理每个日历对象。
@VGR 谢谢,我修好了。【参考方案2】:
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;
【讨论】:
您可以通过简单地减去 int 值来比较它们。例如,int yearCompare = c1.get(Calendar.YEAR) - c2.getYear();
。由于二进制补码表示的性质,即使存在整数溢出,这也有效。以上是关于如何比较 LocalDate 和 Calendar 类的对象?的主要内容,如果未能解决你的问题,请参考以下文章
高效开发:Java中的时间处理,从 Date+SimpleDateFormat+Calendar 到 LocalDateTime+LocalDate+LocalTime