“检查时间”;“以前”;在Jodatime或java.util.Date中
我想展示一下事情发生的时间。比如说“检查时间”;“以前”;在Jodatime或java.util.Date中,java,android,datetime,jodatime,Java,Android,Datetime,Jodatime,我想展示一下事情发生的时间。比如说 24分钟前//放弃秒数 3小时前//放弃分钟 5天前//4小时 三周前//三天 我只有一个长时间戳,因此我可以自由地使用java.util.Date或jodatime或android使用的任何其他Time。我很难把它做好。我试着用jodatime加上减号,但我还不能得到正确的答案 一种方法是让我自己做整个事情:首先从现在开始减去我的时间戳,然后做一些算术。但如果可能的话,我宁愿避免这条路线。您可以使用以下代码: public class TimeAg
- 24分钟前//放弃秒数
- 3小时前//放弃分钟
- 5天前//4小时
- 三周前//三天
长时间戳
,因此我可以自由地使用java.util.Date
或jodatime
或android使用的任何其他Time。我很难把它做好。我试着用jodatime加上减号
,但我还不能得到正确的答案
一种方法是让我自己做整个事情:首先从现在开始减去我的时间戳,然后做一些算术。但如果可能的话,我宁愿避免这条路线。您可以使用以下代码:
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();
}
}
公共类时间间隔{
公共静态最终列表时间=Arrays.asList(
时间单位。天。托米利斯(365),
时间单位。天。托米利斯(30),
时间单位。天。托米利斯(1),
时间单位。小时。托米利斯(1),
时间单位。分钟。托米利斯(1),
时间单位。秒。托米利斯(1));
公共静态最终列表timestring=Arrays.asList(“年”、“月”、“日”、“小时”、“分钟”、“秒”);
公共静态字符串toDuration(长持续时间){
StringBuffer res=新的StringBuffer();
对于(int i=0;i0){
res.append(temp.append(“”).append(Lists.timestring.get(i)).append(temp>1?“s”:“”).append(“ago”);
打破
}
}
如果(“.”等于(res.toString())
返回“0秒前”;
其他的
return res.toString();
}
}
只需使用长时间戳作为参数调用toDuration()
方法
您还可以使用DateUtils.getRelativeTimeSpanString()
。您可以阅读此处的文档Android为所有此类需求提供了实用程序类DateUtils
。如果我正确理解了您的需求,您需要使用实用方法
从文档中获取
CharSequence getRelativeTimeSpanString(长时间、长现在、长最小分辨率)
返回一个字符串,该字符串将“time”描述为相对于“now”的时间。过去的时间跨度格式为“42分钟前”。未来的时间跨度格式为“42分钟内”
您将以time
和System.currentTimeMillis()的形式传递timestamp
asnow
。minResolution
指定要报告的最小时间跨度
例如,如果将过去3秒的时间设置为分钟(单位:毫秒),则该时间将报告为“0分钟前”。通过0中的一个,以分钟为单位,以小时为单位,以天为单位,以周为单位
有一个PrettyTime API,有一个快速的谷歌搜索,一年中没有365天,一个月中也没有30天,这不会有太大的区别。无论如何,OP显示的是大约“以前”的时间。所以这不会有多大区别。顺便说一句,您可以始终使用DateUtils#getRelativeTimeSpanString(),这取决于您如何使用该算法,时间越长,情况就越糟,因为有更好的机制随时可用,它所做的只是传播了一个坏主意-我对日期/时间计算非常挑剔;)我想这就是我寻求的答案。不幸的是,另一个bug正在阻止我现在验证答案;慢慢来,伙计。我在这里,以防你需要任何进一步的帮助,在这个方法。