Java 如何修复已弃用的.getDate()

Java 如何修复已弃用的.getDate(),java,calendar,deprecated,jcalendar,Java,Calendar,Deprecated,Jcalendar,我一直在做一个项目,在我的私有静态类MyDateEvaluator中,有一个不推荐使用的api,那就是getDate 这是我的第一个代码: @Override public boolean isInvalid(Date date) { return date.getDay() == 0; } 然后我尝试将其更改为Calendar.getCalendar.DAY\u OF\u MONTH,但它不起作用,我收到一条错误消息 MyDateEvaluator不是抽象的

我一直在做一个项目,在我的私有静态类MyDateEvaluator中,有一个不推荐使用的api,那就是getDate

这是我的第一个代码:

    @Override
    public boolean isInvalid(Date date) {
    return date.getDay() == 0;
    }
然后我尝试将其更改为Calendar.getCalendar.DAY\u OF\u MONTH,但它不起作用,我收到一条错误消息

MyDateEvaluator不是抽象的

试试这个

 @Override
 public boolean isInvalid(Date date) {
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      return 0 == c.get(Calendar.DAY_OF_WEEK);
 }
java.time 我建议:

Set<DayOfWeek> invalidDays = EnumSet.of(DayOfWeek.SUNDAY);

@Override
public boolean isInvalid(Date date) {
    // First convert to a modern type
    ZonedDateTime zdt = date.toInstant().atZone(ZoneId.systemDefault());
    DayOfWeek dow = zdt.getDayOfWeek();
    return invalidDays.contains(dow);
}
如果你能完全避开老式的约会课,那就更好了。我假设方法签名位于不能更改的接口或超类中。如果是这样,参数确实需要有Date类型,我们不能像您尝试的那样用LocalDate或Calendar替换

日期和日历都设计得很糟糕,而且很早就过时了。因此,当我们得到一个日期时,我们能做的最好的事情就是将它转换成一个瞬间,并从那里执行任何进一步的转换。我的代码依赖于JVM的默认时区,这是不稳定的,因为设置可以随时更改。然而,鉴于Date类的糟糕设计,我们无法避免这种情况


一个比上面的选项稍微简单一点并且可能足够好的选项是宣布DayOfWeek invalidDay=DayOfWeek.SUNDAY;不要使用.equals设置和比较。

使用新的java.time API而不是java.util.date。您想做什么?请详细解释您的类应该有一个方法isInvalidDate date来实现其接口或扩展其超类。所以你不能删除这个方法。您可以更改其实现,即大括号内的所有内容。请尽可能停止使用过时的日期和日历类。改用java.time类。它们从Java8.1开始就存在。您可以决定使用哪个时区。2.将日期转换为瞬间。日期的javadoc有帮助。3.使用选定的时区将瞬间转换为ZoneDateTime。Instant的javadoc有帮助。3.测试ZoneDateTime的日期是否为sunday,ZoneDateTime的javadoc帮助说明基于日历的代码是无意义的:月份的日期不能为0。从1到31。对于接下来10天内的所有日期,该值都返回false。正确使用设计拙劣、过时已久的Calendar类可能不像最初看起来那么容易。
Set<DayOfWeek> invalidDays = EnumSet.of(DayOfWeek.SUNDAY);

@Override
public boolean isInvalid(Date date) {
    // First convert to a modern type
    ZonedDateTime zdt = date.toInstant().atZone(ZoneId.systemDefault());
    DayOfWeek dow = zdt.getDayOfWeek();
    return invalidDays.contains(dow);
}