zoukankan      html  css  js  c++  java
  • Java比较两个时间段之间相差多少天,多少个月,多少年

    在项目开发当中,我们时常碰到要比较两个时间或者与当前时间相差多少天,多少个月,多少年的问题。

    下面给大家分享一下我的整理的一个例子:

    package com.test;  
    import java.text.DateFormat;  
    import java.text.SimpleDateFormat;  
    import java.util.Calendar;  
    import java.util.Date;  
    /**  
     * @description 日期比较天 月 年  
     * @author www.javawind.net  
     */ 
    public class DateTest {  
        public static void main(String[] args) {  
            String date = "2008-06-12";  
              
            DateTest.compareDate(date, null, 0);  
            DateTest.compareDate(date, null, 1);  
            DateTest.compareDate(date, null, 2);  
              
            date = "2006-06-03";          
            DateTest.compareDate(date, null, 0);  
            DateTest.compareDate(date, null, 1);  
            DateTest.compareDate(date, null, 2);  
            DateTest.compareDate(date, "2009-06-01", 0);  
            DateTest.compareDate(date, "2009-06-01", 1);  
            DateTest.compareDate(date, "2009-06-01", 2);  
        }  
          
        /**  
         * @param date1 需要比较的时间 不能为空(null),需要正确的日期格式  
         * @param date2 被比较的时间  为空(null)则为当前时间  
         * @param stype 返回值类型   0为多少天,1为多少个月,2为多少年  
         * @return  
         */ 
        public static int compareDate(String date1,String date2,int stype){  
            int n = 0;  
              
            String[] u = {"天","月","年"};  
            String formatStyle = stype==1?"yyyy-MM":"yyyy-MM-dd";  
              
            date2 = date2==null?DateTest.getCurrentDate():date2;  
              
            DateFormat df = new SimpleDateFormat(formatStyle);  
            Calendar c1 = Calendar.getInstance();  
            Calendar c2 = Calendar.getInstance();  
            try {  
                c1.setTime(df.parse(date1));  
                c2.setTime(df.parse(date2));  
            } catch (Exception e3) {  
                System.out.println("wrong occured");  
            }  
            //List list = new ArrayList();  
            while (!c1.after(c2)) {                     // 循环对比,直到相等,n 就是所要的结果  
                //list.add(df.format(c1.getTime()));    // 这里可以把间隔的日期存到数组中 打印出来  
                n++;  
                if(stype==1){  
                    c1.add(Calendar.MONTH, 1);          // 比较月份,月份+1  
                }  
                else{  
                    c1.add(Calendar.DATE, 1);           // 比较天数,日期+1  
                }  
            }  
              
            n = n-1;  
              
            if(stype==2){  
                n = (int)n/365;  
            }     
              
            System.out.println(date1+" -- "+date2+" 相差多少"+u[stype]+":"+n);        
            return n;  
        }  
          
        /**  
         * 得到当前日期  
         * @return  
         */ 
        public static String getCurrentDate() {  
            Calendar c = Calendar.getInstance();  
            Date date = c.getTime();  
            SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");  
            return simple.format(date);  
        }  
    } 

    运行的结果:

    2008-06-12 -- 2009-06-09 相差多少天:362
    2008-06-12 -- 2009-06-09 相差多少月:12
    2008-06-12 -- 2009-06-09 相差多少年:0
    2006-06-03 -- 2009-06-09 相差多少天:1102
    2006-06-03 -- 2009-06-09 相差多少月:36
    2006-06-03 -- 2009-06-09 相差多少年:3
    2006-06-03 -- 2009-06-01 相差多少天:1094
    2006-06-03 -- 2009-06-01 相差多少月:36
    2006-06-03 -- 2009-06-01 相差多少年:2

  • 相关阅读:
    Visual Studio 2005 ReportViewer 自适应报表大小显示
    【Vegas原创】SharePoint 503 Service Unavailable Error解决方法
    【Vegas改编】用C#实现浏览文件夹功能
    【Vegas2010】最后的g.cn
    【Vegas原创】SQL Server游标的经典使用
    命名规范(变量、控件)
    【Vegas原创】outlook发送时,报550 5.7.1 client does not have permissions to send as this sender解决方法
    【Vegas原创】Winform中使用MaskedTextBox制作IP地址输入框
    【Vegas原创】Apache2.2 + PHP5.3.2 + Oracle 10g配置
    IT职涯路
  • 原文地址:https://www.cnblogs.com/chendezhen/p/14780002.html
Copyright © 2011-2022 走看看