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

来源:互联网 发布:kylie jenner 知乎 编辑:程序博客网 时间:2024/06/01 08:10

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

考虑到闰年及非闰年
传入格式为”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


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

原创粉丝点击