DateTimeFormatter希腊语区域月份值不符合预期的解决方法
希腊语日历月份主格显示问题解决方案
你遇到的问题本质是希腊语月份名称存在语法格差异:默认MMMM格式输出的是所有格形式(对应你看到的Νοεμβρίου),而日历标题需要的是主格形式(Νοέμβριος)。无需手动维护映射表,Java的DateTimeFormatter内置了独立文本样式可以直接解决这个问题。
修正代码
public static String monthYearFromDate(LocalDate date) { Locale greekLocale = new Locale("el"); DateTimeFormatter formatter = new DateTimeFormatterBuilder() // 指定独立文本样式,获取主格月份名称 .appendText(ChronoField.MONTH_OF_YEAR, TextStyle.FULL_STANDALONE) .appendLiteral(" ") .appendPattern("yyyy") .toFormatter(greekLocale); return date.format(formatter); }
关键说明
TextStyle.FULL_STANDALONE:这个样式会输出语言中独立使用的月份名称(即主格),适合日历标题这种不需要依附其他语境的场景。- 原代码用的
MMMM属于关联样式,会根据日期语境输出所有格形式(比如用于“2023年11月5日”这类表达时的语法要求)。
运行修正后的代码,就能得到预期的Νοέμβριος 2023格式。
内容的提问来源于stack exchange,提问作者Chris Damianidis
相关产品推荐
相关产品推荐

