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

标签 java calendar deprecated jcalendar

我一直在开发一个项目,在我的私有(private)静态类 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);

    }

最佳答案

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 那就更好了完全上课。我假设方法签名位于您无法更改的接口(interface)或父类(super class)中。如果是这样,则该参数确实需要具有类型 Date ,我们不能用 LocalDate 代替(也不如您尝试的那样使用 Calendar )。

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

一个比上面简单一点并且可能足够好的选项是声明 DayOfWeek invalidDay = DayOfWeek.SUNDAY;而不是使用 .equals 进行设置和比较.

关于java - 如何修复已弃用的 .getDate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746188/

相关文章:

java - 带有 Java 分页的迭代器设计模式

java - 短 c#'s alternative to Java' s Path.ResolveSibling。不可能吗?

java - JPA(Hibernate)列映射中的原始类和包装类之间有什么区别?

ios - 无法为 iOS Swift 运行 Google Calendar API 示例代码

java - 我正在 weblogic 12.2.1.2 上部署一个restFull webservice webapp,但它失败了

Android 可用性 日历 View

iphone - NIslamicCalendar 和 NIslamicCivilCalendar

ios - 弃用具有多个参数的重命名方法

c++ - 如何将 wcstombs 转换为 wcstombs_s

c - 自 “The C Programming Language” 以来发生了什么变化