DateUtils.getRelativeTimeSpanString 返回格式化日期字符串而不是 "Hours/Minutes Ago"

DateUtils.getRelativeTimeSpanString Returning a Formatted Date String Instead of "Hours/Minutes Ago"

我在尝试将 DateUtils.getRelativeTimeSpanString 变为 return 在 Android 中的预期时遇到了严重的问题。

我已经解决了这里的每个类似问题,none 发布的解决方案有效或相关。

这是我的代码:

CharSequence relativeDate = 
DateUtils.getRelativeTimeSpanString(System.currentTimeMillis(), 
            currentNewsItem.getTimeInMilliseconds(), 
            DateUtils.HOUR_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
            dateView.setText(relativeDate);

currentNewsItem.getTimeInMilliseconds 方法确实 return 很长(例如,刚才它传递了 1521759734 这似乎是正确的)并且 getRelativeTimeSpanString 将正确格式化的日期字符串传递给视图采用 "March 23, 2018" 格式,因此它知道正确的日期。但我需要它通过 "x Hours ago" 或 "x minutes ago" 并且我无法终生弄清楚为什么它不是。

我已经检查了模拟器上的时间,问题出现在我的设备上,所以不是时区设置。

文档说,如果时间跨度大于 7 天,它将恢复为这样的日期字符串,但我已经检查了作为旧时间传递的时间长度,转换器网站显示它是准确时间 4小时前。此外,它显示的是正确的日期(今天),而不是 hours/minutes 之前。

我已经为第三个参数尝试了 HOUR_IN_MILLIS、MINUTES_IN_MILLIS 和 SECONDS_IN_MILLIS 常量,我已经尝试删除最后一个缩写参数,但结果仍然相同。

我已经尝试了各种 public 方法签名来尝试找到一个可能有效的方法,但它们都有相同的结果。

有没有人经历过这个或者谁能指出我哪里出错了? 非常感谢。

如果勾选DateUtils.getRelativeTimeSpanString,参数列为:

getRelativeTimeSpanString (long time, 
            long now, 
            long minResolution, 
            int flags)

但是在您的代码中,
now: 当前时间(以毫秒为单位)作为第一个参数而不是 currentNewsItem.getTimeInMilliseconds() 传递。

要获得 X 分钟前的相对时间跨度 ,您可以使用 DateUtils.MINUTE_IN_MILLIS 并且像 DateUtils.FORMAT_ABBREV_RELATIVE 这样的标志会将相对时间缩写为 X分钟。以前.

因此,您可以将代码更改为:

CharSequence relativeDate = 
DateUtils.getRelativeTimeSpanString(currentNewsItem.getTimeInMilliseconds(), 
        System.currentTimeMillis(),
        DateUtils.MINUTE_IN_MILLIS,
        DateUtils.FORMAT_ABBREV_RELATIVE);
dateView.setText(relativeDate);