package com.isoftstone.pcis.policy.app.payseemoney.utils;
import java.util.Calendar;
import java.util.Date;
/**
* 日期处理组件类
* @author Yesic
* @version 1.0
* 2009-04-22
*/
public class DateUtils {
/**
* 比较两日期的年份差
* @param src
* @param dst
* @return 年份差值
* @author Yesic
* 2009-04-22
* 描述:默认2008-05-04到2009-05-03不算一年
*/
public static int compareYear(Date src, Date dst){
return compareYear(src, dst, true);
}
/**
* 比较两日期的年份差
* @param src 开始时间
* @param dst 结束时间
* @param todayFlag 是否包含当天[标志]
* @return 年份差值
* @author Yesic
* 2009-04-22
* 描述:todayFlag=false,则2008-05-04到2009-05-03算一年
*/
public static int compareYear(Date src, Date dst, boolean todayFlag){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
if(todayFlag)
return dstCal.get(Calendar.YEAR) - srcCal.get(Calendar.YEAR) -
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH)>0)?0:
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH))<0?1:
((dstCal.get(Calendar.DAY_OF_MONTH) - srcCal.get(Calendar.DAY_OF_MONTH))>=0?0:1)
)
);
else
return dstCal.get(Calendar.YEAR) - srcCal.get(Calendar.YEAR) -
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH)>0)?0:
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH))<0?1:
((dstCal.get(Calendar.DAY_OF_MONTH) - srcCal.get(Calendar.DAY_OF_MONTH))>=-1?0:1)
)
);
}
/**
* 比较两日期的月份差
* @param src
* @param dst
* @return 月份差值
* @author Yesic
* 2009-04-22
*/
public static int compareMonth(Date src, Date dst){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
return (dstCal.get(Calendar.YEAR) - srcCal.get(Calendar.YEAR))*12 + //年差
(dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH)) - //月差
((dstCal.get(Calendar.DAY_OF_MONTH) - srcCal.get(Calendar.DAY_OF_MONTH))>=0?0:1);
}
/**
* 比较两日期的日期差
* @param src
* @param dst
* @return 日期差值
* @author Yesic
* 2009-04-22
*/
public static int compareDay(Date src, Date dst){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
return (int)((dst.getTime() - src.getTime())/1000/60/60/24);
}
/**
* 比较支票审核两日期的日期差
* @param src
* @param dst
* @return 日期差值
* @author Yesic
* 2009-04-22
*/
public static int compareCheckDay(Date src, Date dst){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
return (int)((dst.getTime() - src.getTime())/1000/60/60/24)+2;
}
/**
* 时间1减去时间2
* @param date1
* @param date2
* @return
*/
public static int d1MinusD2 (Date date1, Date date2) {
Calendar d1 = Calendar.getInstance();
Calendar d2 = Calendar.getInstance();
d1.setTime(date1);
d2.setTime(date2);
if (d1.after(d2)){ // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int d1_totalDayOfYear = d1.getActualMaximum(Calendar.DAY_OF_YEAR);
int d1_dayOfYear = d1.get(Calendar.DAY_OF_YEAR);
int num1=0;
num1 = d1_totalDayOfYear-d1_dayOfYear;
int d2_totalDayOfYear = d2.getActualMaximum(Calendar.DAY_OF_YEAR);
int d2_dayOfYear = d2.get(Calendar.DAY_OF_YEAR);
int num2 = d2_totalDayOfYear-d2_dayOfYear;
if(d1.get(Calendar.YEAR) == d2.get(Calendar.YEAR)){
return num1-num2;
}else{
int count=num1+d2_dayOfYear;
d1.set(Calendar.YEAR, d1.get(Calendar.YEAR)+1);
while(d1.get(Calendar.YEAR)!=d2.get(Calendar.YEAR)){
d1.set(Calendar.YEAR, d1.get(Calendar.YEAR)+1);
count=count+d1.getActualMaximum(Calendar.DAY_OF_YEAR);
}
return count;
}
}
public static void main(String[] args){
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 9, 10))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 6, 10))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 8, 10))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 8, 20))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 8, 28))+" 年");
System.out.println("\n");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 9, 10))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 6, 10))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 8, 10))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 8, 20))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 8, 28))+" 月");
System.out.println("\n");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 29, 16, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 16, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 12, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 36, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 30, 20))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 30, 50))+" 天");
}
}
import java.util.Calendar;
import java.util.Date;
/**
* 日期处理组件类
* @author Yesic
* @version 1.0
* 2009-04-22
*/
public class DateUtils {
/**
* 比较两日期的年份差
* @param src
* @param dst
* @return 年份差值
* @author Yesic
* 2009-04-22
* 描述:默认2008-05-04到2009-05-03不算一年
*/
public static int compareYear(Date src, Date dst){
return compareYear(src, dst, true);
}
/**
* 比较两日期的年份差
* @param src 开始时间
* @param dst 结束时间
* @param todayFlag 是否包含当天[标志]
* @return 年份差值
* @author Yesic
* 2009-04-22
* 描述:todayFlag=false,则2008-05-04到2009-05-03算一年
*/
public static int compareYear(Date src, Date dst, boolean todayFlag){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
if(todayFlag)
return dstCal.get(Calendar.YEAR) - srcCal.get(Calendar.YEAR) -
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH)>0)?0:
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH))<0?1:
((dstCal.get(Calendar.DAY_OF_MONTH) - srcCal.get(Calendar.DAY_OF_MONTH))>=0?0:1)
)
);
else
return dstCal.get(Calendar.YEAR) - srcCal.get(Calendar.YEAR) -
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH)>0)?0:
((dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH))<0?1:
((dstCal.get(Calendar.DAY_OF_MONTH) - srcCal.get(Calendar.DAY_OF_MONTH))>=-1?0:1)
)
);
}
/**
* 比较两日期的月份差
* @param src
* @param dst
* @return 月份差值
* @author Yesic
* 2009-04-22
*/
public static int compareMonth(Date src, Date dst){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
return (dstCal.get(Calendar.YEAR) - srcCal.get(Calendar.YEAR))*12 + //年差
(dstCal.get(Calendar.MONTH) - srcCal.get(Calendar.MONTH)) - //月差
((dstCal.get(Calendar.DAY_OF_MONTH) - srcCal.get(Calendar.DAY_OF_MONTH))>=0?0:1);
}
/**
* 比较两日期的日期差
* @param src
* @param dst
* @return 日期差值
* @author Yesic
* 2009-04-22
*/
public static int compareDay(Date src, Date dst){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
return (int)((dst.getTime() - src.getTime())/1000/60/60/24);
}
/**
* 比较支票审核两日期的日期差
* @param src
* @param dst
* @return 日期差值
* @author Yesic
* 2009-04-22
*/
public static int compareCheckDay(Date src, Date dst){
Calendar srcCal = Calendar.getInstance();
srcCal.setTime(src);
Calendar dstCal = Calendar.getInstance();
dstCal.setTime(dst);
return (int)((dst.getTime() - src.getTime())/1000/60/60/24)+2;
}
/**
* 时间1减去时间2
* @param date1
* @param date2
* @return
*/
public static int d1MinusD2 (Date date1, Date date2) {
Calendar d1 = Calendar.getInstance();
Calendar d2 = Calendar.getInstance();
d1.setTime(date1);
d2.setTime(date2);
if (d1.after(d2)){ // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int d1_totalDayOfYear = d1.getActualMaximum(Calendar.DAY_OF_YEAR);
int d1_dayOfYear = d1.get(Calendar.DAY_OF_YEAR);
int num1=0;
num1 = d1_totalDayOfYear-d1_dayOfYear;
int d2_totalDayOfYear = d2.getActualMaximum(Calendar.DAY_OF_YEAR);
int d2_dayOfYear = d2.get(Calendar.DAY_OF_YEAR);
int num2 = d2_totalDayOfYear-d2_dayOfYear;
if(d1.get(Calendar.YEAR) == d2.get(Calendar.YEAR)){
return num1-num2;
}else{
int count=num1+d2_dayOfYear;
d1.set(Calendar.YEAR, d1.get(Calendar.YEAR)+1);
while(d1.get(Calendar.YEAR)!=d2.get(Calendar.YEAR)){
d1.set(Calendar.YEAR, d1.get(Calendar.YEAR)+1);
count=count+d1.getActualMaximum(Calendar.DAY_OF_YEAR);
}
return count;
}
}
public static void main(String[] args){
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 9, 10))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 6, 10))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 8, 10))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 8, 20))+" 年");
System.out.println("年差: "+compareYear(new Date(2009, 8, 20), new Date(2010, 8, 28))+" 年");
System.out.println("\n");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 9, 10))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 6, 10))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 8, 10))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 8, 20))+" 月");
System.out.println("月差: "+compareMonth(new Date(2009, 8, 20), new Date(2010, 8, 28))+" 月");
System.out.println("\n");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 29, 16, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 16, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 12, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 36, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 26, 10))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 30, 20))+" 天");
System.out.println("日差: "+compareDay(new Date(2009, 8, 20, 14, 30, 36), new Date(2009, 9, 20, 14, 30, 50))+" 天");
}
}