首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassCastException:不能将java.util.Date转换为java.time.temporal.Temporal

ClassCastException:不能将java.util.Date转换为java.time.temporal.Temporal
EN

Stack Overflow用户
提问于 2022-08-03 18:28:18
回答 2查看 393关注 0票数 0

我正试着计算出两次约会之间的天数。运行线程“AWT 0”中的代码: java.lang.ClassCastException: java.util.Date无法转换为java.time.temporal.Temporal时出错

这是我的代码:

代码语言:javascript
复制
ServiceJpaController serController = new ServiceJpaController(emf);
    List<Service> serviceList = serController.findServiceEntities();
    LocalDate today = LocalDate.now();
    System.out.println("Today date: "+ today); 
    for(Service service:serviceList){
        Date lastServiced = service.getDateOfService();
        System.out.println("Serviced date: "+ lastServiced); 
        long daysBetween = Duration.between(lastServiced.toInstant(), today).toDays();
        if(daysBetween >= 90){
            jTxtAreaServiceDate.append(service.toString());
        }}

添加print语句只是为了检查变量是否包含日期,而这些变量就是这样做的。输出窗口显示:

代码语言:javascript
复制
Today date: 2022-08-03

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.time.temporal.Temporal

Serviced date: Sun May 08 00:00:00 BST 2022

我已经找过解决办法了,但到目前为止还没有找到任何解决办法。如果有人能解释这个错误意味着什么,以及我如何着手解决我的问题,我将非常感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-03 18:49:36

我认为您能做的最好的事情是看看是否可以为代码LocalDate Date lastServiced = service.getDateOfService();获取LocalDate,这意味着从方法service.getDateOfService();返回LocalDate

有时候它可能不在你的控制范围之内。因此,您可以尝试下一个最佳解决方案,即将Util.Date转换为LocalDate。您可以使用下面的代码。

代码语言:javascript
复制
LocalDate lastServiceLocalDate = lastServiced.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();

现在有了两个LocalDate,所以您可以使用下面的代码在

代码语言:javascript
复制
long daysBetween = DAYS.between(lastServiceLocalDate, today);
票数 1
EN

Stack Overflow用户

发布于 2022-08-03 19:06:46

Duration.between()接受两个Temporal对象,并返回作为long之间的几天。不幸的是,Date不是Temporal类型的对象。

因此,您需要将Date转换为LocalDate。我认为下面的代码是可行的。

代码语言:javascript
复制
ServiceJpaController serController = new ServiceJpaController(emf);
    List<Service> serviceList = serController.findServiceEntities();
    LocalDate today = LocalDate.now();
    System.out.println("Today date: "+ today); 
    for(Service service:serviceList){
        Date lastServiced = service.getDateOfService();
        System.out.println("Serviced date: "+ lastServiced);
        long daysBetween = 
                Duration.between(       
                    lastServiced
                        .toInstant()
                        .atZone(ZoneId.systemDefault())
                        .toLocalDate(), 
                    today
                )
                .toDays();
        if(daysBetween >= 90){
            jTxtAreaServiceDate.append(service.toString());
        }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73226160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档