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

时间:2018-03-23 01:31:10

标签: android android-date java-date android-dateutils apache-commons-dateutils

我在尝试让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 Hours ago”或“x minutes ago”,我不能为我的生活弄明白为什么它不是。

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

要获得 X分钟前的相对时间,您可以使用DateUtils.MINUTE_IN_MILLISDateUtils.FORMAT_ABBREV_RELATIVE之类的标记会将相对时间缩短为 X分钟。前

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

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