DateUtils.getRelativeTimeSpanString返回格式化的日期字符串,而不是“前几小时/分钟”

Dav*_*vis 0 android android-date apache-commons-dateutils android-dateutils java-date

我在尝试获取DateUtils.getRelativeTimeSpanString以返回其在Android中应该遇到的问题时遇到了严重的问题。

我在这里经历过每个类似的问题,而发布的解决方案都没有起作用或没有意义。

这是我的代码:

CharSequence relativeDate = 
DateUtils.getRelativeTimeSpanString(System.currentTimeMillis(), 
            currentNewsItem.getTimeInMilliseconds(), 
            DateUtils.HOUR_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
            dateView.setText(relativeDate);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

有没有人遇到过这种情况,或者有人可以指出我要去哪里错了?非常感谢。

glo*_*ing 5

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

getRelativeTimeSpanString (long time, 
            long now, 
            long minResolution, 
            int flags)
Run Code Online (Sandbox Code Playgroud)

但是,
现在在您的代码中当前时间(以毫秒为单位)作为第一个参数而不是传递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);
Run Code Online (Sandbox Code Playgroud)