如何计算两个日期的毫秒差,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
相关产品推荐
相关产品推荐

