0

我在试图让 DateUtils.getRelativeTimeSpanString 返回它在 Android 中应该做的事情时遇到了严重的问题。

我在这里遇到了所有类似的问题,并且发布的解决方案都没有工作或相关。

这是我的代码:

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

currentNewsItem.getTimeInMilliseconds 方法确实返回了一个 long(例如,刚才它通过了1521759734,这似乎是正确的)并且 getRelativeTimeSpanString 将格式正确的日期字符串以“2018 年 3 月 23 日”的格式传递给视图,因此它知道正确的日期。但我需要它通过“x 小时前”或“x 分钟前”,而我终其一生都无法弄清楚为什么它不是。

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

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

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

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

有没有人经历过这种情况,或者任何人都可以指出我哪里出错了?非常感谢。

4

1 回答 1

7

如果选中DateUtils.getRelativeTimeSpanString,则参数列出为:

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

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

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

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

CharSequence relativeDate = 
DateUtils.getRelativeTimeSpanString(currentNewsItem.getTimeInMilliseconds(), 
        System.currentTimeMillis(),
        DateUtils.MINUTE_IN_MILLIS,
        DateUtils.FORMAT_ABBREV_RELATIVE);
dateView.setText(relativeDate);
于 2018-04-02T11:11:02.397 回答