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

Android中DateUtils.getRelativeTimeSpanString未返回相对时间问题

解决DateUtils.getRelativeTimeSpanString返回绝对日期而非相对时间的问题

我之前也踩过这个一模一样的坑!一眼就注意到你提到的时间戳示例1521759734——这个是秒级时间戳,但DateUtils.getRelativeTimeSpanString的前两个参数要求的是毫秒级的时间戳!这几乎肯定是你问题的根源。

问题分析

你说这个时间戳对应4小时前,但直接把这个秒数传入方法的话,它会被当成毫秒来解析,对应的实际时间是1970-01-18 13:12:39(远早于当前时间),和当前时间的跨度远超7天,所以方法自然返回了绝对日期格式,完全符合文档里“跨度超7天返回日期”的规则。

解决方案

把currentNewsItem.getTimeInMilliseconds()返回的秒级时间戳乘以1000,转换成毫秒级再传入:

long newsTimeMillis = currentNewsItem.getTimeInMilliseconds() * 1000;
CharSequence relativeDate = DateUtils.getRelativeTimeSpanString(
    System.currentTimeMillis(),
    newsTimeMillis,
    DateUtils.MINUTE_IN_MILLIS,  // 最小显示到分钟级别,更贴合需求
    DateUtils.FORMAT_ABBREV_RELATIVE
);
dateView.setText(relativeDate);

额外验证点

如果转换后还是有问题,可以再检查这几点:

  • 计算System.currentTimeMillis()和转换后的newsTimeMillis的差值,确认是否符合预期(比如4小时的话,差值应该是4 * 3600 * 1000 = 14400000左右)
  • 第三个参数如果传HOUR_IN_MILLIS,会忽略分钟数直接显示小时;传MINUTE_IN_MILLIS则会在时间差小于1小时时显示分钟,更灵活
  • 保留FORMAT_ABBREV_RELATIVE可以得到更简洁的缩写结果(比如“4h ago”而非“4 hours ago”)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:41:03