| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
y37f
10年前发布

Java计算两个日期相差多少天

/*    * 从键盘输入一个日期,格式为yyyy-M-d       要求计算该日期与1949年10月1日距离多少天       例如:       用户输入了:1949-10-2       程序输出:1       用户输入了:1949-11-1       程序输出:31   */    import java.util.Arrays;    import java.util.Scanner;    public class Demo09 {        static int[][] days = { // 定义平年days[0]和闰年days[1]        {0,31,28,31,30,31,30,31,31,30,31,30,31},        {0,31,29,31,30,31,30,31,31,30,31,30,31}};          // 字符串转换 整数        public static int[] conversion(String s) {            String[] ss = s.split("\\-");            int[] t = new int[3];            t[0] = Integer.parseInt(ss[0]);            t[1] = Integer.parseInt(ss[1]);            t[2] = Integer.parseInt(ss[2]);            return t;        }        // 计算任意一年内的总天数 (是365还是366)        public static int calcDay(int y,int m,int d){            int sum = d;    // 每一年的总天数 (初始化为最后一个月的天数)            int i = 0;      // 平年下标为 0            if((y%4==0&&y%100!=0)||(y%400==0)) i = 1; // 闰年下标为 1            for(int j=0;j<m;j++){                sum += days[i][j];            }            return sum;        }        // 判断是否交换输入的两个日期 (日期小者放前)        public static void isSwap(int[] o,int[] n){            if(o[0]>n[0]){   // 日期内容交换                for(int i=0;i<o.length;i++){                    int t = o[i];                    o[i] = n[i];                    n[i] = t;                }            }        }        // 输出        public static String p(int[] s){            StringBuffer sb = new StringBuffer();            for(int i=0;i<s.length-1;i++){                sb.append(s[i]+"-");            }            sb.append(s[s.length-1]);            return sb.toString();        }        // 计算总天数        public static int calc(int[] o, int[] n) {            int sum;            if(n[0]==o[0]){ // 如果年份相等,侧直接计算天数                sum = calcDay(n[0],n[1],n[2])-calcDay(o[0],o[1],o[2]);  // 大的日期天数-小的日期天数            }else{                sum = calcDay(o[0],12,31)-calcDay(o[0],o[1],o[2]);  // 得到第一年日期到下一年开始的天数                for(int i=o[0]+1;i<n[0];i++){    // 中间的每年天数 (不包含第一年和最后一年)                    sum += calcDay(i,12,31);                }                sum += calcDay(n[0],n[1],n[2]); // 加上最后一年的天数            }            return sum;        }        public static void main(String[] args){    //      int[] o = conversion("1949-10-2");            Scanner scan = new Scanner(System.in);            System.out.print("输入日期格式为:(1949-10-2)\n输入第一个日期:");            int[] o = conversion(scan.nextLine());            System.out.print("输入第二个日期:");            int[] n = conversion(scan.nextLine());            int sum = 0;    // 总和            isSwap(o,n);    // 如果o日期小于n日期,侧交换            sum = calc(o, n);   // 计算总天数            System.out.println(p(o)+" 到 "+p(n)+"\n距离"+sum+"天");        }    }