我在尝试让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常量,我尝试删除最后一个缩写参数,但结果仍然相同。
我已经尝试了各种公共方法签名来尝试找到一个可能有效的方法,但它们都有相同的结果。
有没有人经历过这个或有人能指出我哪里出错了? 非常感谢。
答案 0 :(得分:4)
如果选中DateUtils.getRelativeTimeSpanString
,参数列为:
getRelativeTimeSpanString (long time,
long now,
long minResolution,
int flags)
但是在你的代码中,
现在:当前时间(以毫秒为单位)作为第一个参数而不是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);