[Java] Java计算两个日期相差多少天 →→→→→进入此内容的聊天室

来自 , 2020-11-17, 写在 Java, 查看 128 次.
URL http://www.code666.cn/view/1aab7baa
  1. /*
  2.  * 从键盘输入一个日期,格式为yyyy-M-d
  3.     要求计算该日期与1949年10月1日距离多少天
  4.     例如:
  5.     用户输入了:1949-10-2
  6.     程序输出:1
  7.     用户输入了:1949-11-1
  8.     程序输出:31
  9. */  
  10. import java.util.Arrays;  
  11. import java.util.Scanner;  
  12. public class Demo09 {  
  13.     static int[][] days = { // 定义平年days[0]和闰年days[1]  
  14.     {0,31,28,31,30,31,30,31,31,30,31,30,31},  
  15.     {0,31,29,31,30,31,30,31,31,30,31,30,31}};  
  16.  
  17.     // 字符串转换 整数  
  18.     public static int[] conversion(String s) {  
  19.         String[] ss = s.split("\\-");  
  20.         int[] t = new int[3];  
  21.         t[0] = Integer.parseInt(ss[0]);  
  22.         t[1] = Integer.parseInt(ss[1]);  
  23.         t[2] = Integer.parseInt(ss[2]);  
  24.         return t;  
  25.     }  
  26.     // 计算任意一年内的总天数 (是365还是366)  
  27.     public static int calcDay(int y,int m,int d){  
  28.         int sum = d;    // 每一年的总天数 (初始化为最后一个月的天数)  
  29.         int i = 0;      // 平年下标为 0  
  30.         if((y%4==0&&y%100!=0)||(y%400==0)) i = 1; // 闰年下标为 1  
  31.         for(int j=0;j<m;j++){  
  32.             sum += days[i][j];  
  33.         }  
  34.         return sum;  
  35.     }  
  36.     // 判断是否交换输入的两个日期 (日期小者放前)  
  37.     public static void isSwap(int[] o,int[] n){  
  38.         if(o[0]>n[0]){   // 日期内容交换  
  39.             for(int i=0;i<o.length;i++){  
  40.                 int t = o[i];  
  41.                 o[i] = n[i];  
  42.                 n[i] = t;  
  43.             }  
  44.         }  
  45.     }  
  46.     // 输出  
  47.     public static String p(int[] s){  
  48.         StringBuffer sb = new StringBuffer();  
  49.         for(int i=0;i<s.length-1;i++){  
  50.             sb.append(s[i]+"-");  
  51.         }  
  52.         sb.append(s[s.length-1]);  
  53.         return sb.toString();  
  54.     }  
  55.     // 计算总天数  
  56.     public static int calc(int[] o, int[] n) {  
  57.         int sum;  
  58.         if(n[0]==o[0]){ // 如果年份相等,侧直接计算天数  
  59.             sum = calcDay(n[0],n[1],n[2])-calcDay(o[0],o[1],o[2]);  // 大的日期天数-小的日期天数  
  60.         }else{  
  61.             sum = calcDay(o[0],12,31)-calcDay(o[0],o[1],o[2]);  // 得到第一年日期到下一年开始的天数  
  62.             for(int i=o[0]+1;i<n[0];i++){    // 中间的每年天数 (不包含第一年和最后一年)  
  63.                 sum += calcDay(i,12,31);  
  64.             }  
  65.             sum += calcDay(n[0],n[1],n[2]); // 加上最后一年的天数  
  66.         }  
  67.         return sum;  
  68.     }  
  69.     public static void main(String[] args){  
  70. //      int[] o = conversion("1949-10-2");  
  71.         Scanner scan = new Scanner(System.in);  
  72.         System.out.print("输入日期格式为:(1949-10-2)\n输入第一个日期:");  
  73.         int[] o = conversion(scan.nextLine());  
  74.         System.out.print("输入第二个日期:");  
  75.         int[] n = conversion(scan.nextLine());  
  76.         int sum = 0;    // 总和  
  77.         isSwap(o,n);    // 如果o日期小于n日期,侧交换  
  78.         sum = calc(o, n);   // 计算总天数  
  79.         System.out.println(p(o)+" 到 "+p(n)+"\n距离"+sum+"天");  
  80.     }  
  81. }
  82.  
  83.  
  84. //java/7033

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

这儿你可以回复上面这条便签

captcha