Java时间类的相互转换应用

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秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值