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

Android中如何将输入日期转换为指定的新日期格式?

解决方案:用Java 8+日期API处理格式转换

别再用SimpleDateFormat了,它不仅线程不安全,处理你这种标准UTC日期格式还极易踩坑。推荐使用Java 8引入的日期时间API(Android上可通过Desugar或三方库支持),具体步骤如下:

1. 配置项目支持新日期API

方法一:启用Core Library Desugaring(Android Gradle Plugin 4.0+)

在模块级build.gradle中添加配置:

android {
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

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

方法二:用ThreeTenABP(兼容Android 8.0以下)

添加依赖:

dependencies {
    implementation 'com.jakewharton.threetenabp:threetenabp:1.4.2'
}

并在自定义Application的onCreate中初始化:

override fun onCreate() {
    super.onCreate()
    ThreeTenABP.init(this)
}

2. 具体转换代码

步骤1:解析UTC输入字符串

输入的2023-11-20T17:09:08.000Z是标准ISO 8601 UTC格式,直接用Instant.parse()解析即可:

import java.time.Instant
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.util.Locale

// 解析输入的UTC日期
val inputUtcDate = Instant.parse("2023-11-20T17:09:08.000Z")
// 转换为设备本地时区的日期时间
val localDateTime = inputUtcDate.atZone(ZoneId.systemDefault())

步骤2:格式化目标样式(带序数词如2nd、1st)

默认的DateTimeFormatter不支持日期序数词,需要手动处理:

// 生成日期序数词后缀的工具函数
fun getOrdinalSuffix(day: Int): String {
    return when {
        day in 11..13 -> "th"
        day % 10 == 1 -> "st"
        day % 10 == 2 -> "nd"
        day % 10 == 3 -> "rd"
        else -> "th"
    }
}

// 分别格式化各部分再拼接
val timePart = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH)
    .format(localDateTime)
    .lowercase() // 转为小写的am/pm
val dayPart = "${localDateTime.dayOfMonth}${getOrdinalSuffix(localDateTime.dayOfMonth)}"
val monthYearPart = DateTimeFormatter.ofPattern("MMMM yyyy", Locale.ENGLISH)
    .format(localDateTime)

// 最终结果
val formattedDate = "$timePart, $dayPart $monthYearPart"
// 示例输出:5:09 pm, 20th November 2023

关键说明

  • 必须指定Locale.ENGLISH,避免不同地区的月份名称、am/pm显示不符合需求
  • 新日期API是线程安全的,比SimpleDateFormat更可靠,也不需要手动编写复杂的解析格式字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:42:49