日期问题

/* 

 * 从键盘输入一个日期,格式为yyyy-M-d 

    要求计算该日期与1949年10月1日距离多少天 

    例如: 

    用户输入了:1949-10-2 

    程序输出:1 

    用户输入了:1949-11-1 

    程序输出:31 

*/  

/*import java.util.Arrays;  

import java.util.Scanner;  

public class 日期问题 {  

    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+"天");  

    }  

}  

*/

//方法二

import java.util.Date;

import java.text.*;

import java.util.*;



public class 日期问题 {



	public static void main(String[] args)throws Exception {



		while (true) {

			SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");

			Date d = new Date();

			Date a = new Date();

			Scanner sc = new Scanner(System.in);

			String s = sc.nextLine();

			a = sf.parse(s);

			d = sf.parse("1949-10-1"); 

			long x = a.getTime() - d.getTime();

			System.out.println(x / 1000 / (24 * 60 * 60));

		}

	}



}
运行结果:

1949-10-2

1

1950-10-1

365

1961-12-11

4454

你可能感兴趣的:(日期)