【问题标题】:How to compare objects of LocalDate and Calendar class?如何比较 LocalDate 和 Calendar 类的对象?
【发布时间】: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 在这里不起作用。

标签: java localdate java-calendar


【解决方案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();。由于二进制补码表示的性质,即使存在整数溢出,这也有效。
猜你喜欢
  • 2017-11-27
  • 1970-01-01
  • 2015-05-25
  • 2011-09-25
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
相关资源
最近更新 更多