在项目开发当中,我们时常碰到要比较两个时间或者与当前时间相差多少天,多少个月,多少年的问题。
下面给大家分享一下我的整理的一个例子:
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