前段时间做东西的时候发现网上公开的计算时间间隔的源码不能适应我的需求,所以自己摸索了一会,根据我的需求写了一个方法。总算是可以解决我的问题了。
##先读数轴##
基本原理是计算利用unix时间戳,计算出间隔时间(between)再分别计算天时分秒。
之所以说网上的源码不适应我的需求,主要是因为他们生成的start的时间戳精度不同。
这里用DateFormat类里的parse()方法生成时间戳。
既然有人发明了轮子,那么就没必要重复发明轮子
public static String getTime(String time){
try{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat.parse(time);
BigDecimal bb = new BigDecimal(String.valueOf(new Date().getTime())).subtract(new BigDecimal(date.getTime()));
long b = bb.longValue();
long d = b/86400000;
long h = (b-d*86400000)/1000/60/60;
long m = (b-d*86400000-h*3600000)/1000/60;
long s = (b-d*86400000-h*3600000-m*60000)/1000;
// long mm = b-d*86400000-h*3600000-m*60000-s*1000;
return d +"天" + h +"时" + m +"分"+ s +"秒";
}catch(ParseException e){
e.printStackTrace();
}
return null;
}
方法返回d天h时m分s秒,需要进一步细分的毫秒注释在变量mm中。方法形参String型time(即start)
time格式为yyyy-MM-dd HH:mm:ss
例:2020-06-09 22:00:00
需要注意日期和时间之间的空格
time的格式可以根据SimpleDateFormat允许的情况自定义
根据需求使用返回值
Android应用实例:set到textview上
需要注意的是通过线程动态设置textview的text,要将线程runOnUiThread。
new Timer().schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if(PublicCache.startTime!=null){
tvTime.setText(TimeUtils.getTime(PublicCache.startTime));
}
}
});
}
},0,1);
效果如图
因为时间一直在变,截图又只能是静态的,效果如图。(主要是不会弄动态图)
我这里的起始时间(start)是2020-06-09 22:00:00
距离现在(now)的2020-11-4 22:36:00左右