You need to enable JavaScript to run this app. Kotlin中如何从Google Material Time Picker获取AM/PM值
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何从Google Material Time Picker获取AM/PM值

Kotlin 12小时制MaterialTimePicker获取AM/PM时段的实现方案

MaterialTimePicker 组件本身没有独立暴露获取AM/PM时段的接口,即使设置了TimeFormat.CLOCK_12H的展示格式,通过picker.hour获取的选中小时值,始终是0~23范围的24小时制整数,时段判断完全可以基于这个返回值直接推导。

时段判断规则

  • 选中小时值在0~11区间时,对应时段为AM(上午)
  • 选中小时值在12~23区间时,对应时段为PM(下午/晚间)

补全后的完整回调逻辑

在原有代码的确认按钮回调中,替换为如下实现即可完成时间获取与展示:

binding.etFirstTime.setOnClickListener {
    val picker = MaterialTimePicker.Builder()
        .setTimeFormat(TimeFormat.CLOCK_12H)
        .setHour(12)
        .setMinute(10)
        .setTitleText("Select Shop's Timing")
        .build()
    picker.showNow(childFragmentManager, "Time")

    picker.addOnPositiveButtonClickListener {
        // 获取picker返回的24小时制选中值
        val selectedHour24 = picker.hour
        val selectedMinute = picker.minute
        
        // 直接判断AM/PM
        val timePeriod = if (selectedHour24 < 12) "AM" else "PM"
        
        // 适配12小时制的展示数值(修正特殊边界值)
        val displayHour = when (selectedHour24) {
            0 -> 12 // 凌晨0点对应12 AM
            in 13..23 -> selectedHour24 - 12 // 下午1点到23点转换为1-12的展示值
            else -> selectedHour24 // 上午1-11点直接展示
        }
        
        // 拼接时间字符串设置到输入框
        binding.etFirstTime.setText("$displayHour:${String.format("%02d", selectedMinute)} $timePeriod")
    }
}

常见踩坑提醒

  • 不要误以为12小时制展示模式下,picker.hour会返回1-12的12小时制数值,组件内部始终存储24小时制的原始时间值,这是Material官方组件的固定设计
  • 注意边界值匹配:选中中午12点整时,picker.hour返回值为12,必须归为PM时段;选中凌晨0点整时,返回值为0,必须归为AM时段,否则会出现时段错位
  • 如果需要适配多语言环境下的本地化时段文案(例如中文环境展示“上午/下午”而非硬编码AM/PM),可以直接调用系统时间格式化接口生成对应文案,不需要自行写多语言映射
// 本地化时段文案获取示例
val calendar = Calendar.getInstance().apply {
    set(Calendar.HOUR_OF_DAY, picker.hour)
    set(Calendar.MINUTE, picker.minute)
}
val localizedPeriod = android.text.format.DateFormat.format("a", calendar)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 08:36:04