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

Java/Kotlin使用cs_CZ Locale时日期格式不符,如何获取dd. MM.格式?

问题原因

Locale("cs", "CZ")对应的Unicode CLDR(通用区域数据仓库)默认规则中,ddMM对应的最佳日期格式就是dd.MM.,没有中间空格,所以系统原生方法返回的结果符合区域默认规范,如果你需要自定义格式,可采用以下方案:

可行解决方案

最稳妥的实现方式是针对cs_CZ区域做特殊判断,其他区域仍然保留系统默认规则,不会影响其他国家/地区的适配逻辑。

Kotlin 实现

val pattern = if (locale.language == "cs" && locale.country == "CZ") {
    // 捷克区域自定义带空格的格式
    "dd. MM."
} else {
    DateFormat.getBestDateTimePattern(locale, "ddMM")
}
// 原代码中ofPattern已指定locale,后续withLocale属于冗余调用可直接省略
val dateFormatted = DateTimeFormatter.ofPattern(pattern, locale).format(date)

Java 实现

String pattern;
if ("cs".equals(locale.getLanguage()) && "CZ".equals(locale.getCountry())) {
    pattern = "dd. MM.";
} else {
    pattern = DateFormat.getBestDateTimePattern(locale, "ddMM");
}
String dateFormatted = DateTimeFormatter.ofPattern(pattern, locale).format(date);
优化建议

如果后续需要适配的自定义区域格式较多,可以将不同区域的自定义格式存放到配置文件/常量类中统一管理,避免硬编码散落在业务逻辑中,后续修改维护更方便。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:27:01