You need to enable JavaScript to run this app. 如何计算两个日期的毫秒差,Android构建时Calendar的set方法报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

如何计算两个日期的毫秒差,Android构建时Calendar的set方法报错如何解决

问题原因

编译报错是因为Codename One的跨平台java.util.Calendar封装类未提供6入参版本的set()方法重载,仅支持单字段设置等少量重载形式,你调用的6参版本属于原生Java JDK的API,没有被CN1兼容实现,因此Android构建时触发方法匹配错误。

修复方案

将代码中6个参数的set()调用拆分为逐个字段单独设置即可,修改后逻辑和原有逻辑完全一致,适配CN1跨平台构建要求,完整代码如下:

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
try {
    java.util.Calendar now = java.util.Calendar.getInstance();
    // 拆分原6参set调用,适配CN1 API
    now.set(java.util.Calendar.YEAR, now.get(java.util.Calendar.YEAR));
    now.set(java.util.Calendar.MONTH, now.get(java.util.Calendar.MONTH));
    now.set(java.util.Calendar.DATE, now.get(java.util.Calendar.DATE));
    now.set(java.util.Calendar.HOUR_OF_DAY, 0);
    now.set(java.util.Calendar.MINUTE, 0);
    now.set(java.util.Calendar.SECOND, 0);
    now.set(java.util.Calendar.MILLISECOND, 0);

    java.util.Calendar otherDate = java.util.Calendar.getInstance();
    otherDate.setTime(dateFormat.parse("6/28/2021"));
    // 拆分原6参set调用,适配CN1 API
    otherDate.set(java.util.Calendar.YEAR, otherDate.get(java.util.Calendar.YEAR));
    otherDate.set(java.util.Calendar.MONTH, otherDate.get(java.util.Calendar.MONTH));
    otherDate.set(java.util.Calendar.DATE, otherDate.get(java.util.Calendar.DATE));
    otherDate.set(java.util.Calendar.HOUR_OF_DAY, 0);
    otherDate.set(java.util.Calendar.MINUTE, 0);
    otherDate.set(java.util.Calendar.SECOND, 0);
    otherDate.set(java.util.Calendar.MILLISECOND, 0);

    long num = otherDate.getTime().getTime() - now.getTime().getTime();
    Log.p("The long millis expiration is in "+ num);
} catch (ParseException ex) {
    return -999999;
}

注:代码中额外去掉了对num的冗余强转,变量本身已经是long类型无需重复转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:24:02