You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从JDatePicker获取日期遇类型转换异常:GregorianCalendar无法转Date

解决JDatePicker日期获取的类型转换异常

问题原因

你遇到的GregorianCalendar cannot be cast to Date异常,是因为当前使用的jdatepicker库中,JDatePicker的默认模型返回的是GregorianCalendar实例,而不是你代码里直接强转的Date类型,导致类型不匹配。

修复方案

方案一:从Calendar对象中提取Date

直接修改addToRegister方法里的日期获取逻辑,先把返回值转为Calendar,再通过getTime()方法得到Date对象:

public void addToRegister() {
    String name = nameTextField.getText();
    sdf = new SimpleDateFormat();
    
    // 修正日期获取代码
    Calendar calendar = (Calendar) datePicker.getModel().getValue();
    Date dateToFormat = calendar.getTime();
    
    String date = sdf.format(dateToFormat);
    String amount = amountTextField.getText();
    tableModel.addRow(new Object[] {name, date, amount});
}

方案二:初始化时指定返回Date类型的模型

如果你的jdatepicker版本支持UtilDateModel(多数主流版本都支持),可以在创建JDatePicker时直接使用该模型,这样getValue()会直接返回Date,无需额外转换:

// 替换原datePicker初始化代码
UtilDateModel dateModel = new UtilDateModel();
JDatePanel datePanel = new JDatePanel(dateModel);
datePicker = new JDatePicker(datePanel);

// 此时addToRegister里的代码可以保留原强转逻辑
Date dateToFormat = (Date) datePicker.getModel().getValue();

额外提示

  • 建议指定SimpleDateFormat的具体格式,比如new SimpleDateFormat("yyyy-MM-dd"),避免默认格式不一致的问题
  • 注意空值判断:如果用户未选择日期,getValue()可能返回null,建议添加非空校验避免空指针异常

内容的提问来源于stack exchange,提问作者maverickar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:01:06