- /*
- * 从键盘输入一个日期,格式为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+"天");
- }
- }
来源: http://www.phpxs.com/code/1002234/