1. 程式人生 > >從鍵盤輸入一個日期,格式為yyyy-M-d 要求計算該日期與1949年10月1日距離多少天(java)

從鍵盤輸入一個日期,格式為yyyy-M-d 要求計算該日期與1949年10月1日距離多少天(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+"天");
	}
}