zoukankan      html  css  js  c++  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 日期问题 {  
        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)
    输入第一个日期:");  
            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)+"
    距离"+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
  • 相关阅读:
    Android中的Handler, Looper, MessageQueue和Thread
    ANR程序无响应原因及应对办法
    避免内存泄露的一些简单方法
    android内存泄露及OOM介绍
    listview异步加载图片优化
    利用convertView及viewHolder优化Adapter
    Sqlite介绍及其语句
    关于单页面和传统页面跳转的思考
    快速入门Vue
    JS编码
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3172396.html
Copyright © 2011-2022 走看看