getRelativeTimeSpanString()返回开始日期,而不是时间之前

时间:2019-07-08 14:10:46

标签: android kotlin

我正在尝试计算两个日期之间的时间,并在UI中将时间差异显示为x mins agox days agox weeks ago等(取决于时间长度)。

第一个日期是api给我的发布日期。然后,我将此日期设置为yyyy-MM-dd HH:mm:ss。第二个日期是当前时间。

val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
sdf.setTimeZone(TimeZone.getTimeZone("GMT"))
val time = sdf.parse("$year-$month-$day $hours").time   // 2019-03-14 13:00:55
val now = System.currentTimeMillis()
val relative = DateUtils.getRelativeTimeSpanString(time, now, 0L, DateUtils.FORMAT_ABBREV_ALL)

但是,当我打印relative时,我得到Mar 14的时候就会得到x months ago

除了在某处阅读过getRelativeTimeSpanString()仅可使用7天的信息外,我不能说出我所缺少的东西了,但是文档没有说明这一点,所以不确定是不是这种情况?

任何解决此问题的帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是一个功能。

您的最小分辨率为0毫秒,因此时间将被精确打印。像“ 16周前13:00:55”这样的输出没有意义。

您可以将最低分辨率更改为DateUtils.WEEK_IN_MILLIS,以获得类似于“ 16周前”的输出。

还有另一个DateUtils method,可让您指定过渡分辨率:

  

停止报告相对测量值所经过的时间(以毫秒为单位)。大于此分辨率的经过时间将默认为正常日期格式。例如,使用WEEK_IN_MILLIS时将从“ 7天前”转换为“ 12月12日”

理论上可行,但实际上上限为WEEK_IN_MILLIS

在后台运行的是RelativeDateTimeFormatter,您可以通过检查source了解更多信息。

如果您确实需要“几个月前”的解决方案,请忽略DateUtils并推出自己的实现。例如,使用java.time / ThreeTenBP API:https://stackoverflow.com/a/56450659/101361