Android中如何从指定日期获取毫秒数?
从指定日期获取毫秒数(用于Android DatePickerDialog日期限制)
为什么需要毫秒数?
在Android开发中,要限制DatePickerDialog的可选日期范围,可通过以下两个属性实现:
dpd.datePicker.maxDate(dpd为DatePickerDialog实例)dpd.datePicker.minDate
这两个属性接收长整型毫秒数作为参数,以此限定可选的最大/最小日期。
获取指定日期毫秒数的方法
1. 基于Calendar API的实现(你的当前方案)
你已经通过Calendar实例设置了目标日期,只需调用getTimeInMillis()方法即可获取对应的毫秒数:
val c1 = Calendar.getInstance() // 设置为上月最后一天 c1.set(Calendar.DAY_OF_MONTH, 0) val maxDateMillis = c1.timeInMillis // 获取毫秒数 val c2 = Calendar.getInstance() // 设置为10年前的日期 c2.add(Calendar.YEAR, -10) val minDateMillis = c2.timeInMillis // 获取毫秒数 // 应用到DatePickerDialog dpd.datePicker.maxDate = maxDateMillis dpd.datePicker.minDate = minDateMillis
2. 更推荐的现代API方案(Java 8+ / Android API 26+)
Calendar是旧版API,存在线程不安全、设计繁琐等问题。推荐使用Java 8引入的java.time包下的日期类(Android API 26+原生支持,低版本可通过Desugar兼容):
// 获取上月最后一天的毫秒数 val maxDate = LocalDate.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()) val maxDateMillis = maxDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli() // 获取10年前今天的毫秒数 val minDate = LocalDate.now().minusYears(10) val minDateMillis = minDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli() // 应用到DatePickerDialog dpd.datePicker.maxDate = maxDateMillis dpd.datePicker.minDate = minDateMillis
该方案代码更直观可读,还能避免Calendar的常见设计陷阱(比如月份从0开始的设定)。
内容的提问来源于stack exchange,提问作者Navneeth S
相关产品推荐
相关产品推荐

