如何修复已弃用的 .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);
}
如果能完全避免老式的Date
class就更好了。我假设方法签名位于您无法更改的接口或 superclass 中。如果是这样,参数确实需要具有类型 Date
,我们不能用 LocalDate
代替(也不能像您尝试的那样用 Calendar
代替)。
Date
和 Calendar
都设计得很差,而且早就过时了。因此,当我们得到 Date
时,我们能做的最好的事情就是将其转换为 Instant
并从那里执行任何进一步的转换。我的代码依赖于 JVM 的默认时区,它不稳定,因为设置可以随时更改。但是,考虑到 Date
class 的糟糕设计,我们无法避免这种情况。
一个比上面的更简单并且可能足够好的选项是声明 DayOfWeek invalidDay = DayOfWeek.SUNDAY;
而不是集合并使用 .equals
.
进行比较
我一直在做一个项目,在我的 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);
}
如果能完全避免老式的Date
class就更好了。我假设方法签名位于您无法更改的接口或 superclass 中。如果是这样,参数确实需要具有类型 Date
,我们不能用 LocalDate
代替(也不能像您尝试的那样用 Calendar
代替)。
Date
和 Calendar
都设计得很差,而且早就过时了。因此,当我们得到 Date
时,我们能做的最好的事情就是将其转换为 Instant
并从那里执行任何进一步的转换。我的代码依赖于 JVM 的默认时区,它不稳定,因为设置可以随时更改。但是,考虑到 Date
class 的糟糕设计,我们无法避免这种情况。
一个比上面的更简单并且可能足够好的选项是声明 DayOfWeek invalidDay = DayOfWeek.SUNDAY;
而不是集合并使用 .equals
.