在项目开发当中,我们时常碰到要比较两个时间或者与当前时间相差多少天,多少个月,多少年的问题。
本人结合网上的一些例子,稍作修改,提供出下面示例,与网友们分享。
- 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






 阿云: