Java計算兩個日期相差多少天

y37f 9年前發布 | 1K 次閱讀 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+"天");  
    

    }
    }</pre>

 本文由用戶 y37f 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!