Kotlin中如何将2021-07-14T00:00:00.000-0300字符串转为日/月份格式
Kotlin 日期字符串转换实现方案
以下方案基于java.time包实现(JDK 8+ 原生支持,Android 环境 API Level < 26 需开启核心库脱糖支持),可直接替换你原有函数的逻辑:
完整实现代码
import java.time.OffsetDateTime import java.time.format.DateTimeFormatter import java.util.Locale private fun ajusteDeData(baseData: String): String { // 输入字符串格式匹配器 val inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ") // 英文月份全称输出格式,指定Locale.US避免系统语言影响输出 val monthFormatter = DateTimeFormatter.ofPattern("MMMM", Locale.US) return runCatching { val date = OffsetDateTime.parse(baseData, inputFormatter) val dayOfMonth = date.dayOfMonth // 计算日期序数后缀 val ordinalSuffix = when { // 11、12、13为特殊情况,统一用th dayOfMonth in 11..13 -> "th" dayOfMonth % 10 == 1 -> "st" dayOfMonth % 10 == 2 -> "nd" dayOfMonth % 10 == 3 -> "rd" else -> "th" } val monthName = date.format(monthFormatter) "$dayOfMonth$ordinalSuffix/$monthName" }.getOrDefault(baseData) // 解析失败时返回原输入,可按需调整为其他兜底逻辑 }
核心逻辑说明
- 输入格式匹配:
yyyy-MM-dd'T'HH:mm:ss.SSSZ可完全匹配你给出的2021-07-14T00:00:00.000-0300格式,其中Z对应末尾的时区偏移量 - 序数后缀处理:单独处理11、12、13三个特殊值,其余日期按个位数字匹配对应的st/nd/rd/th后缀
- 本地化兼容:显式指定
Locale.US保证月份始终输出英文全称,不会随系统语言变化
内容的提问来源于stack exchange,提问作者Giovani Leite Vitor
相关产品推荐
相关产品推荐

