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

如何使用kotlinx-datetime库本地化月份名称(不依赖java.time)

kotlinx-datetime 实现月份名称本地化(不依赖java.time)

直接调用SomeInstant.toLocalDateTime(TimeZone.currentSystemDefault()).month.name返回英文月份,是因为Month枚举的name属性是硬编码的枚举常量名,本身不支持本地化。要实现多语言月份名称,需使用kotlinx-datetime自带的格式化API,步骤如下:

  • 借助LocalDateTimeFormat自定义格式化规则,通过指定locale参数切换语言
  • 可精确只格式化月份部分,避免解析整段日期字符串

示例代码:

import kotlinx.datetime.Instant
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime
import kotlinx.datetime.format.LocalDateTimeFormat
import kotlinx.datetime.format.monthName
import kotlinx.datetime.format.FormatStyle
import java.util.Locale

// 示例Instant对象
val someInstant = Instant.parse("2024-05-20T12:00:00Z")
val localDateTime = someInstant.toLocalDateTime(TimeZone.currentSystemDefault())

// 格式化为法语完整月份名称
val frenchMonthFormatter = LocalDateTimeFormat {
    monthName(style = FormatStyle.FULL)
    locale = Locale.FRENCH
}
val frenchMonthName = frenchMonthFormatter.format(localDateTime) // 返回 "mai"

// 使用系统默认地区的月份名称
val systemLocaleFormatter = LocalDateTimeFormat {
    monthName(style = FormatStyle.FULL)
    locale = Locale.getDefault()
}
val systemMonthName = systemLocaleFormatter.format(localDateTime)

说明:

  • FormatStyle.FULL返回完整月份名称(如法语的"janvier"),需缩写可改用FormatStyle.SHORT(如"jan")
  • Locale.getDefault()会自动获取用户系统的地区设置,无需手动指定语言代码
  • 这里用到的java.util.Locale不属于java.time类库,符合要求

内容的提问来源于stack exchange,提问作者Сергей Беляков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:49:58