在Jodatime或java.util.Date中检查时间“之前”

时间:2015-10-17 19:57:41

标签: java android datetime jodatime

我想要显示多久以前发生的事情。例如

  • 24分钟前//丢弃秒钟
  • 3小时前//丢弃分钟
  • 5天前//丢弃时间
  • 3周前// discard days

我拥有的只是long timestamp,因此我可以自由使用java.util.Datejodatime或其他Time安卓使用的内容。我正好难以做到这一点。我试着用minus使用jodatime,但我还没有得到正确答案。

一种方法是我自己完成整个事情:首先从现在减去我的时间戳,然后做一些算术。但如果可能的话,我宁愿避开这条路线。

2 个答案:

答案 0 :(得分:2)

Android为所有此类要求提供了实用程序类DateUtils。如果我已正确理解您的要求,则需要使用DateUtils#getRelativeTimeSpanString()实用程序方法。

来自

的文档

CharSequence getRelativeTimeSpanString(很长一段时间,很长时间,很长的minResolution)

  

返回描述' time'的字符串。作为一个相对于现在'的时间。过去的时间跨度格式为" 42分钟前"。未来的时间跨度格式为"在42分钟内"。

您将timestamp作为timeSystem.currentTimeMillis()作为now传递。 minResolution指定要报告的最小时间跨度。

  

例如,过去3秒的时间将报告为" 0分钟前"如果将其设置为MINUTE_IN_MILLIS。传递0,MINUTE_IN_MILLIS,HOUR_IN_MILLIS,DAY_IN_MILLIS,WEEK_IN_MILLIS

之一

答案 1 :(得分:0)

您可以使用以下代码:

templ = dict((i, 1.0) for i in Utags)
result = dict((key, templ.copy()) for key in templ)

只需使用您的长时间戳作为参数调用 public class TimeAgo { public static final List<Long> times = Arrays.asList( TimeUnit.DAYS.toMillis(365), TimeUnit.DAYS.toMillis(30), TimeUnit.DAYS.toMillis(1), TimeUnit.HOURS.toMillis(1), TimeUnit.MINUTES.toMillis(1), TimeUnit.SECONDS.toMillis(1) ); public static final List<String> timesString = Arrays.asList("year","month","day","hour","minute","second"); public static String toDuration(long duration) { StringBuffer res = new StringBuffer(); for(int i=0;i< Lists.times.size(); i++) { Long current = Lists.times.get(i); long temp = duration/current; if(temp>0) { res.append(temp).append(" ").append( Lists.timesString.get(i) ).append(temp > 1 ? "s" : "").append(" ago"); break; } } if("".equals(res.toString())) return "0 second ago"; else return res.toString(); } } 方法。

您也可以使用toDuration()。您可以在此处阅读文档Date Utils