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

Android 12/13中dd-MMM-yyyy日期格式显示异常求助

解决Android日期格式化中dd-MMM-yyyy在12/13版本显示Sept而非Sep的问题

问题原因

Android 12和13系统里,默认Locale的月份缩写规则有变化,导致SimpleDateFormat输出Sept,而旧版本系统输出的是更短的Sep,这就造成了版本间的不一致。

解决方案

方案1:指定固定Locale(兼容所有Android版本)

直接给SimpleDateFormat指定美式英语Locale,美式英语里九月的缩写固定是Sep,能保证所有版本输出统一:

@JvmStatic
fun getCurrentDate(format: String): String {
    // 指定Locale.US确保月份缩写规则一致
    val sdf = SimpleDateFormat(format, Locale.US)
    val currentDate = sdf.format(Date())
    return currentDate
}

方案2:使用Java 8+日期API(推荐,更稳定)

SimpleDateFormat是过时的API,推荐用java.time包下的类(Android API 26+原生支持,低版本可通过开启Core Library Desugaring兼容):

@JvmStatic
fun getCurrentDate(format: String): String {
    val formatter = DateTimeFormatter.ofPattern(format, Locale.US)
    val currentDate = LocalDate.now().format(formatter)
    return currentDate
}

如果要兼容API 26以下版本,需要在Module级别的build.gradle中开启Desugaring:

android {
    defaultConfig {
        // 开启Core Library Desugaring
        coreLibraryDesugaringEnabled = true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
}

说明

  • 核心是指定Locale.US,不同Locale的月份缩写规则差异大,固定Locale能避开系统版本或用户区域设置带来的影响。
  • Java 8日期API比SimpleDateFormat更线程安全、设计更合理,是长期维护的首选方案。

内容的提问来源于stack exchange,提问作者Anil Ranga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:01:41