加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java计算两个日期相差多少天

发布时间:2020-12-14 23:38:45 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 /* * 从键盘输入一个日期,格式为yyyy-M-d 要求计算该日期与1949年10月1日距离多少天 例如: 用户输入了:1949-10-2 程序输出:1 用户输入了:1949-11

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

/* 
 * 从键盘输入一个日期,格式为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,30,31},{0,29,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[2]);  // 得到第一年日期到下一年开始的天数  
            for(int i=o[0]+1;i<n[0];i++){    // 中间的每年天数 (不包含第一年和最后一年)  
                sum += calcDay(i,31);  
            }  
            sum += calcDay(n[0],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+"天");  
    }  
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读