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


    /*
     * 从键盘输入一个日期,格式为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+"天");
    	}
    }
    

    运行结果:

    输入日期格式为:(1949-10-2)
    输入第一个日期:1949-10-2
    输入第二个日期:1949-11-2
    1949-10-2 到 1949-11-2
    距离31天
    


  • 相关阅读:
    windows下的文件遍历(使用CFindFile)
    hdu 1728 搜索求最少的转向次数
    linux中vsftpd配置文件详解
    QLineEdit 自动完成(使用setCompleter,内含一个ListView)
    Qt 的内部进程通信机制
    qt 获取windows 的消息(通过MFC的DLL的透明窗体转发消息)good
    JS的类型比较与转换图
    使用C#开发ActiveX控件
    MapXtreme+Asp.net 动态轨迹
    MS SQL 日常维护管理常用脚本(二)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/2997974.html
Copyright © 2020-2023  润新知