從鍵盤輸入一個日期,格式為yyyy-M-d 要求計算該日期與1949年10月1日距離多少天(java)
阿新 • • 發佈:2019-02-13
/* * 從鍵盤輸入一個日期,格式為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+"天"); } }