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

Android如何获取MaterialDatePicker日期选择器选中的起止日期

MaterialDatePicker范围选择回调提取起止日期方案

你没法直接调用Pair的取值方法,是因为注册监听器时没有指定对应泛型,回调入参默认被识别为Object类型。不需要解析toString()返回的字符串,通过类型匹配就能直接取值:

  • 日期范围选择模式下,回调返回的selection实际类型为androidx.core.util.Pair<Long, Long>,其中first属性存储选中起始日期的UTC毫秒级时间戳,second属性存储选中结束日期的UTC毫秒级时间戳。
  • 注册监听器时给MaterialPickerOnPositiveButtonClickListener指定Pair<Long, Long>泛型,入参会自动识别为对应Pair类型,不需要手动强转就能直接提取两个时间戳。

正确实现代码

dateRangePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Pair<Long, Long>>() {
    @Override
    public void onPositiveButtonClick(Pair<Long, Long> selection) {
        if (selection == null) return;
        // 提取起止时间戳
        long startTimestamp = selection.first;
        long endTimestamp = selection.second;

        // 如需转换为本地Date对象,必须指定UTC时区,否则会出现日期偏移
        Calendar utcCal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        utcCal.setTimeInMillis(startTimestamp);
        Date startDate = utcCal.getTime();

        utcCal.setTimeInMillis(endTimestamp);
        Date endDate = utcCal.getTime();
    }
});

注意事项

  • 不要用解析toString()字符串的方式提取日期,不同版本组件的Pair字符串输出规则可能变动,很容易导致解析逻辑失效
  • 组件返回的时间戳基于UTC零时区计算,转本地日期时如果用系统默认时区初始化日历实例,大概率会出现选中日期和解析结果差1天的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:48:22