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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:24:51