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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:52:53