JAVA基础------实现日期差值的计算

自己写了一个计算日期差值的小功能

考虑到闰年及非闰年
传入格式为”YYYY-MM-DD”或”YYYY-M-D”的字符串即可,没有实现对传入参数非日期格式或数据的检查。

date1参数为当前时间
date2参数为设定时间

class cDate {
    public String calculatingDateDifference(String date1, String date2) {    // date1 当前时间 date2 设定时间

        String[] a = date1.split("-");
        String[] b = date2.split("-");
        int month1 = Integer.parseInt(a[1].trim());
        int month2 = Integer.parseInt(b[1].trim());
        int dofm1 = Integer.parseInt(a[2].trim());    // day of month
        int dofm2 = Integer.parseInt(b[2].trim());
        int year1 = Integer.parseInt(a[0]);
        int year2 = Integer.parseInt(b[0]);

        int day1 = calculatingDays(year1, month1, dofm1);    // day of year
        int day2 = calculatingDays(year2, month2, dofm2);

        System.out.println("date1:"+ date1 +" month1:" + month1 + " dofm1:" + dofm1 + " year1:" + year1 + " day1:" + day1);
        System.out.println("date2:"+ date2 +" month2:" + month2 + " dofm2:" + dofm2 + " year2:" + year2 + " day2:" + day2);
        if (year1 != year2)   //不同年
        {
            if (year1 > year2) {
                if (month1 == month2 && dofm1 == dofm2) {
                    return year1 - year2 + "年前的今天";
                } else {
                    int timeDistance = 0;
                    for (int i = year2; i < year1; i++) {
                        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
                        {
                            timeDistance += 366;
                        } else    //不是闰年
                        {
                            timeDistance += 365;
                        }
                    }
                    return "距今已过去" + (timeDistance + (day1 - day2)) + "天";    // 把年累加到相同(计算一年天数*年数) + 一年中两天的差值
                }
            } else if (year2 > year1) {
                int timeDistance = 0;
                for (int i = year1; i < year2; i++) {
                    if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
                    {
                        timeDistance += 366;
                    } else {    // 不是闰年
                        timeDistance += 365;
                    }
                }
                if (month1 == month2 && dofm1 == dofm2) {
                    return year2 - year1 + "年后的今天,还有" + (timeDistance + day2 - day1) + "天";
                }
                return "距离设定时间还有" + (timeDistance + day2 - day1) + "天";
            }


        } else {    //同一年
            if (day1 > day2) {
                return "已经过去" + (day1 - day2) + "天";
            } else if (day1 == day2) {
                return "就是今天";
            } else {
                return "还有" + (day2 - day1) + "天";
            }
        }
        return "我已经被判断日期绕晕了";
    }

    public int calculatingDays(int y, int m, int d) {    // 返回day of year
        m = m-1;
        int dayOfYear = 0;
        switch (m) {    // 利用case选择 累加
            case 11:
                dayOfYear = dayOfYear + 30;
            case 10:
                dayOfYear += 31;
            case 9:
                dayOfYear += 30;
            case 8:
                dayOfYear += 31;
            case 7:
                dayOfYear += 31;
            case 6:
                dayOfYear += 30;
            case 5:
                dayOfYear += 31;
            case 4:
                dayOfYear += 30;
            case 3:
                dayOfYear += 31;
            case 2:
                if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)    //闰年
                {
                    dayOfYear += 29;
                } else {    // 不是闰年
                    dayOfYear += 28;
                }
            case 1:
                dayOfYear += 31;
            case 0:
                dayOfYear += 0;
        }
        return dayOfYear + d;
    }
}

public class Test {

    public static void main(String[]agrs)
    {
        cDate cdate = new cDate();
        System.out.println(cdate.calculatingDateDifference("2017-12-1", "2018-1-1"));    // 填入测试数据
        System.out.println("HelloWorld!");
    }
}

Exler

Exler


若发现代码有错误的地方或是有更好实现方法的,欢迎讨论及分享,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值