如何使用SimpleDateFormat将DD/MM/YYYY格式日期转为带星期的可读格式?
实现方案
核心逻辑分为「输入日期字符串解析为Date对象」+「Date对象格式化为中文周日月展示格式」两步,具体实现如下:
第一步:调整日期解析方法,兼容两种输入格式
你原有代码的convertToDate仅支持解析ISO标准时间格式,需修改为同时支持你提到的DD/MM/YY格式(即示例中的15/09/21):
fun String.convertToDate(): Date? { // 按优先级定义需要兼容的解析格式,Locale统一设为中国区域避免乱码 val parseFormats = listOf( SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.CHINA), SimpleDateFormat("dd/MM/yy", Locale.CHINA) ) parseFormats.forEach { sdf -> try { return sdf.parse(this) } catch (e: ParseException) { // 格式不匹配则尝试下一种 } } Timber.e("wrong date format - parsing not possible") return null }
第二步:新增Date转目标展示格式的扩展方法
新增方法把解析得到的Date对象格式化为「星期二, 4月1日」这类中文展示效果:
fun Date.formatToChineseDisplay(): String { val sdf = SimpleDateFormat("EEEE, M月d日", Locale.CHINA) return sdf.format(this) }
第三步:调用示例
你原有排序逻辑无需调整,需要展示日期的位置直接调用上述格式化方法即可:
// 示例:拿到finishDate后转成目标展示文本 val displayDate = it.finishDate.convertToDate()?.formatToChineseDisplay() ?: "日期异常"
注意事项
- SimpleDateFormat是线程不安全类,多线程场景下建议每次使用创建新实例,或使用JDK8+的
DateTimeFormatter替代 - 如果你的输入日期是4位年份(如15/09/2021),只需把解析格式的
dd/MM/yy改为dd/MM/yyyy即可
转换前日期示例
内容的提问来源于stack exchange,提问作者ugur d
相关产品推荐
相关产品推荐

