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

Android DateFormat格式化时间毫秒位仅显示SSS问题

问题说明

获取带毫秒值的当前时间时,格式化输出后毫秒位未正常解析,仅显示SSS字符,实际输出样例:
20:41:03.SSS some other text
直接通过Toast展示格式化后的日期,输出结果完全一致。
相关实现代码:

import android.text.format.DateFormat
import java.util.Calendar
...

String.format(
    "%s IOException: %s",
    DateFormat.format("HH:mm:ss.SSS", Calendar.getInstance().time),
    ex.message
)
问题原因

android.text.format.DateFormat是Android提供的本地化时间格式化类,它的格式占位符规则和Java标准的时间格式化类不兼容,不支持SSS毫秒占位符,遇到未实现的占位符时会直接原样输出字符,不会做解析替换。

修复方案

不要用Android自带的DateFormat做自定义毫秒精度的时间格式化,替换为Java标准的SimpleDateFormat即可:

import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale

...
// 建议指定Locale避免部分地区系统默认配置导致的格式异常
val timeFormat = SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault())
String.format(
    "%s IOException: %s",
    timeFormat.format(Calendar.getInstance().time),
    ex.message
)

如果项目minSdkVersion >= 24,也可以直接用Java 8新增的java.time系列API实现,线程安全更可靠:

import java.time.LocalTime
import java.time.format.DateTimeFormatter
...

val timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS")
String.format(
    "%s IOException: %s",
    LocalTime.now().format(timeFormatter),
    ex.message
)

注意:android.text.format.DateFormat的设计目标是适配用户系统设置的时间、日期展示格式,不适合用来做自定义精确格式(尤其是带毫秒的日志、时间戳场景)的格式化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:39:14