我正在尝试计算两个日期之间的时间,并在UI中将时间差异显示为x mins ago
,x days ago
,x 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天的信息外,我不能说出我所缺少的东西了,但是文档没有说明这一点,所以不确定是不是这种情况?
任何解决此问题的帮助将不胜感激!
答案 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