import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
import java.util.Date;
//关键点在BigDecimal Instant simpleDateFormat Duration包装类的应用
public class Demo57 {
public static void main(String[] args) throws ParseException {
DistanceTimeCal distanceTimeCal = new DistanceTimeCal();
distanceTimeCal.Distance("2018年8月16日 上午 11时34分49秒");//时间计算
System.out.println(distanceTimeCal.toString() );
}
public static class DistanceTimeCal{
private String date;
private BigDecimal howManyDays;
private BigDecimal hours;
private BigDecimal minute;
private BigDecimal sec;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public BigDecimal getHowManyDays() {
return howManyDays;
}
public void setHowManyDays(BigDecimal howManyDays) {
this.howManyDays = howManyDays;
}
public BigDecimal getHours() {
return hours;
}
public void setHours(BigDecimal hours) {
this.hours = hours;
}
public BigDecimal getMinute() {
return minute;
}
public void setMinute(BigDecimal minute) {
this.minute = minute;
}
public BigDecimal getSec() {
return sec;
}
public void setSec(BigDecimal sec) {
this.sec = sec;
}
@Override
public String toString() {
return "现在距离\t" +date+
"\t有" + howManyDays +"天"+
hours+"小时" + minute + "分"+
sec + "秒";
}
public void Distance(String s) throws ParseException {
Instant now = Instant.now(); //获取当前时间戳
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("y年M月d日 a H时m分s秒");//设置时间的转换格式
// String reborn = "2018年8月16日 上午 11时34分49秒";
Date parse = simpleDateFormat.parse(s);//转成date时间
Instant rebornInstant = parse.toInstant();//转换成时间戳
Duration between = Duration.between(rebornInstant,now);//求时间戳差值
long seconds = between.getSeconds();//得出差值
BigDecimal num = new BigDecimal((double) seconds / 86400);//求出天数
BigDecimal howManyDays = num.setScale(0, RoundingMode.DOWN);//天数整数
BigDecimal DayRemainder = num.remainder(BigDecimal.ONE);//天数小数
BigDecimal hoursOri = DayRemainder.multiply(new BigDecimal(24));
BigDecimal hours = hoursOri.setScale(0, RoundingMode.DOWN);//小时整数
BigDecimal hoursRemainder = hoursOri.remainder(BigDecimal.ONE);//剩余的小时
BigDecimal minuteOri = hoursRemainder.multiply(new BigDecimal(60));
BigDecimal minute = minuteOri.setScale(0, RoundingMode.DOWN);//分钟整数
BigDecimal minuteRemainder = minuteOri.remainder(BigDecimal.ONE);//剩余的分钟
BigDecimal secOri = minuteRemainder.multiply(new BigDecimal(60));
BigDecimal sec = secOri.setScale(0, RoundingMode.DOWN);//秒数整数
setDate(s);
setHowManyDays(howManyDays);
setHours(hours);
setMinute(minute);
setSec(sec);
}
}
效果
现在距离 2018年8月16日 上午 11时34分49秒 有1656天22小时56分58秒