Android中如何准确判断系统时间为12小时制还是24小时制?
准确判断Android系统时间制式(12/24小时制)的方案
当系统开启「使用区域默认值」开关时,原有的Settings.System.TIME_12_24读取和DateFormat.is24HourFormat()方法会因为设置值变为"locale"而依赖Locale判断,可通过以下步骤实现精准判断:
核心思路
- 优先读取系统
TIME_12_24设置:- 若值为
"24"→ 确定是24小时制 - 若值为
"12"→ 确定是12小时制 - 若值为
"locale"(开启区域默认)→ 根据当前系统Locale的默认时间格式判断
- 若值为
实现代码(Kotlin)
import android.content.Context import android.provider.Settings import android.text.format.DateFormat import java.util.Locale fun isSystemUsing24HourFormat(context: Context): Boolean { val timeFormatSetting = Settings.System.getString(context.contentResolver, Settings.System.TIME_12_24) return when (timeFormatSetting) { "24" -> true "12" -> false else -> { // 获取当前系统配置的Locale val systemLocale = context.resources.configuration.locales.get(0) // 获取该Locale默认的时间格式模板(针对小时分钟的格式) val timePattern = DateFormat.getBestDateTimePattern(systemLocale, "HHmm") // 24小时制格式包含"H",12小时制包含"h" timePattern.contains("H") } } }
关键细节说明
- 权限说明:读取
TIME_12_24无需额外权限(Android 6.0+及更低版本均支持) - Locale获取:使用
context.resources.configuration.locales[0]确保获取的是当前系统生效的区域设置,而非应用自定义Locale - 格式判断逻辑:24小时制的时间格式会使用
H或HH(如HH:mm),12小时制使用h或hh(如hh:mm a),通过检测格式字符串中是否包含H即可准确判断
内容的提问来源于stack exchange,提问作者Min Li
相关产品推荐
相关产品推荐

