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

How to fix deprecated .getDate()

我一直在做一个项目,在我的 private static class MyDateEvaluator 中,有一个已弃用的 api,即 getDate().

这是我的第一个代码:

    @Override
    public boolean isInvalid(Date date) {
    return date.getDay() == 0;
    }

然后我尝试将其更改为 Calendar.get(Calendar.DAY_OF_MONTH),但它不起作用,我收到一条错误消息,

MyDateEvaluator is not abstract.

    public boolean isInvalid(Calendar Calendar) {
        return 0 == Calendar.get(Calendar.DAY_OF_MONTH);

    }

试试这个

 @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);
}

如果能完全避免老式的Dateclass就更好了。我假设方法签名位于您无法更改的接口或 superclass 中。如果是这样,参数确实需要具有类型 Date,我们不能用 LocalDate 代替(也不能像您尝试的那样用 Calendar 代替)。

DateCalendar 都设计得很差,而且早就过时了。因此,当我们得到 Date 时,我们能做的最好的事情就是将其转换为 Instant 并从那里执行任何进一步的转换。我的代码依赖于 JVM 的默认时区,它不稳定,因为设置可以随时更改。但是,考虑到 Date class 的糟糕设计,我们无法避免这种情况。

一个比上面的更简单并且可能足够好的选项是声明 DayOfWeek invalidDay = DayOfWeek.SUNDAY; 而不是集合并使用 .equals.

进行比较