从键盘输入一个日期,格式为yyyy-M-d 要求计算该日期与1949年10月1日距离多少天

来源:互联网 发布:印度为什么穷 知乎 编辑:程序博客网 时间:2024/05/01 10:45
/* * 从键盘输入一个日期,格式为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;// 平年下标为 0if((y%4==0&&y%100!=0)||(y%400==0)) i = 1; // 闰年下标为 1for(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+"天");}}
运行结果:
输入日期格式为:(1949-10-2)输入第一个日期:1949-10-2输入第二个日期:1949-11-21949-10-2 到 1949-11-2距离31天

原创粉丝点击