Android获取当前标准时区缩写(如TRT)的实现问题咨询
Android 获取标准时区缩写解决方案
问题原因
原有代码返回Europe/Istanbul这类时区ID而非缩写,是因为TextStyle.SHORT_STANDALONE在Android系统的时区规则下,对部分时区会优先返回区域格式的ID,不会映射到通用时区缩写。
可用解决方案
方案1:原生API实现(无需引入第三方库)
直接用java.util.TimeZone的原生方法即可获取对应缩写,适配绝大多数场景:
fun getTimeZoneAbbreviation(): String { val timeZone = TimeZone.getDefault() // 第二个参数isDaylight:可根据是否处于夏令时动态调整,不需要的话传false即可 return timeZone.getDisplayName(false, TimeZone.SHORT, Locale.ENGLISH) }
- 土耳其时区场景下调用该方法,会直接返回你需要的
TRT结果,完全符合通用时区缩写标准。 - 如果需要适配夏令时场景,把
getDisplayName第一个参数替换为timeZone.inDaylightTime(Date())即可。
方案2:引入ThreeTenABP库(适配低版本Android,时区数据更全)
如果你的应用需要兼容Android 8.0以下版本,且需要更精准的时区缩写匹配,可以引入ThreeTenABP库:
- 首先在模块级build.gradle添加依赖:
dependencies { implementation 'com.jakewharton.threetenabp:threetenabp:1.4.6' }
- 调用代码示例:
fun getTimeZoneAbbreviation(): String { val zoneId = ZonedDateTime.now().zone return zoneId.getDisplayName(TextStyle.SHORT, Locale.ENGLISH) }
注意事项
- 部分存在多个别名的时区,原生API返回的缩写已经和通用时区缩写表对齐,无需额外映射。
- 如果你有自定义特殊时区缩写的需求,可以预先维护一个时区ID到缩写的映射Map,获取到默认时区ID后直接查表返回即可。
内容的提问来源于stack exchange,提问作者Abdulsamet Kılınçarslan
相关产品推荐
相关产品推荐

