使用Datepicker Dialog作为按钮计算日期差时,getTimeInMillis()方法无法解析
解决DatePicker Dialog日期计算中getTimeInMillis()无法解析的问题
嘿,我来帮你搞定这个问题!从你的描述和代码来看,getTimeInMillis()无法被解析的核心原因大概率是你用来存储日期的from和to对象类型不对——这个方法只属于Calendar、Date或者Java 8+的Instant这类能表示时间戳的对象,如果你直接用DatePicker实例或者单独的年/月/日数值,肯定会找不到这个方法。
下面给你分步骤的解决方案:
1. 正确从DatePickerDialog获取并存储日期对象
当你用DatePickerDialog选择日期后,要把回调里拿到的年、月、日转换成Calendar对象(最常用的方式),比如:
// 先在类里定义两个Calendar成员变量 private Calendar from; private Calendar to; // 初始化"起始日期"选择对话框 DatePickerDialog datePickerDialogFrom = new DatePickerDialog( yourContext, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { // 创建Calendar实例并设置选中的日期 from = Calendar.getInstance(); from.set(year, month, dayOfMonth); } }, // 默认显示当前日期的年、月、日 Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DAY_OF_MONTH) ); // "结束日期"对话框同理 DatePickerDialog datePickerDialogTo = new DatePickerDialog( yourContext, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { to = Calendar.getInstance(); to.set(year, month, dayOfMonth); } }, Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DAY_OF_MONTH) );
2. 修正日期差值计算代码
现在from和to都是Calendar对象了,就可以正常调用getTimeInMillis()了。另外给你提两个关键注意点:
- 一定要先检查
from和to不为空,避免空指针异常 - 直接用毫秒差值乘以乘客数会得到超大的数值,通常业务场景是按天数/小时数计算,记得做单位转换
修正后的代码:
// 先判断日期是否已选择 if (from != null && to != null) { long diffMillis = to.getTimeInMillis() - from.getTimeInMillis(); // 示例:转换成天数(根据你的业务需求调整单位) long diffDays = diffMillis / (1000 * 60 * 60 * 24); // 计算最终结果 String total = String.valueOf(passenger * diffDays); // 如果确实需要用毫秒数计算,就用下面这行: // String total = String.valueOf(passenger * diffMillis); }
如果你用的是Java 8+的LocalDate
如果项目里用了更现代的LocalDate,那它本身没有getTimeInMillis(),需要先转换成Instant再获取时间戳:
// 假设from和to是LocalDate对象 ZoneId zone = ZoneId.systemDefault(); long fromMillis = from.atStartOfDay(zone).toInstant().toEpochMilli(); long toMillis = to.atStartOfDay(zone).toInstant().toEpochMilli(); long diff = toMillis - fromMillis; String total = String.valueOf(passenger * diff);
最后再提醒一下:记得处理日期顺序问题,如果用户选的结束日期早于起始日期,差值会是负数,可能需要加个判断提示用户哦!
内容的提问来源于stack exchange,提问作者JeyEm
相关产品推荐
相关产品推荐

