1 CommonLang3中的DateUtils的Api源码解读
1.1 add**
源码
public static Date addYears(Date date, int amount) {
return add(date, 1, amount);
}
public static Date addMonths(Date date, int amount) {
return add(date, 2, amount);
}
public static Date addWeeks(Date date, int amount) {
return add(date, 3, amount);
}
public static Date addDays(Date date, int amount) {
return add(date, 5, amount);
}
public static Date addHours(Date date, int amount) {
return add(date, 11, amount);
}
public static Date addMinutes(Date date, int amount) {
return add(date, 12, amount);
}
public static Date addSeconds(Date date, int amount) {
return add(date, 13, amount);
}
public static Date addMilliseconds(Date date, int amount) {
return add(date, 14, amount);
}
private static Date add(Date date, int calendarField, int amount) {
validateDateNotNull(date);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(calendarField, amount);
return c.getTime();
}
说明
在年月日时分秒毫秒,,返回一个加上对应的时间的时间
Demo
Date now = new Date();
System.out.println("now:"+format(now));
//addYears
System.out.println("addYears:"+format(DateUtils.addYears(now, 1)));
//addMonths
System.out.println("addMonths:"+format(DateUtils.addMonths(now, 1)));
//addDays
System.out.println("addDays:"+format(DateUtils.addDays(now, 1)));
//addHours
System.out.println("addHours:"+format(DateUtils.addHours(now, 1)));
//addMinutes
System.out.println("addMinutes:"+format(DateUtils.addMinutes(now, 1)));
//addSeconds
System.out.println("addSeconds:"+format(DateUtils.addSeconds(now, 1)));
//addMilliseconds
System.out.println("addMilliseconds:"+DateUtils.addMilliseconds(now, 1));
private static String format(Date date){
return DateFormatUtils.format(date,"yyyy-MM-dd-HH:mm:ss");
}
1.2 isSameDay
源码
public static boolean isSameDay(Date date1, Date date2) {
if (date1 != null && date2 != null) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
return isSameDay(cal1, cal2);
} else {
throw nullDateIllegalArgumentException();
}
}
public static boolean isSameDay(Calendar cal1, Calendar cal2) {
if (cal1 != null && cal2 != null) {
return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6);
} else {
throw nullDateIllegalArgumentException();
}
}
说明
判断两个时间是不是一样的.
Demo
Date now = new Date();
System.out.println("now:"+format(now));
//isSameDay
System.out.println("isSameDay:"+DateUtils.isSameDay(now, DateUtils.addYears(now, 1)));
System.out.println("isSameDay:"+DateUtils.isSameDay(now, Calendar.getInstance().getTime()));
1.1 round
源码
public static Date round(Date date, int field) {
validateDateNotNull(date);
Calendar gval = Calendar.getInstance();
gval.setTime(date);
modify(gval, field, DateUtils.ModifyType.ROUND);
return gval.getTime();
}
说明
round(final Date date, final int field),将指定的日期中指定的部分四舍五入,四舍五入的 常量有
Calendar.YEAR和Calendar.MONTH、Calendar.HOUR_OF_DAY、Calendar.DAY_OF_MONTH、
Calendar.HOUR、Calendar.MINUTE等;
Demo
System.out.println("round:"+format(DateUtils.round(now, Calendar.YEAR)));
System.out.println("round:"+format(DateUtils.round(now, Calendar.MONTH)));
1.1 truncate
源码
public static Date truncate(Date date, int field) {
validateDateNotNull(date);
Calendar gval = Calendar.getInstance();
gval.setTime(date);
modify(gval, field, DateUtils.ModifyType.TRUNCATE);
return gval.getTime();
}
public static Calendar truncate(Calendar date, int field) {
if (date == null) {
throw nullDateIllegalArgumentException();
} else {
Calendar truncated = (Calendar)date.clone();
modify(truncated, field, DateUtils.ModifyType.TRUNCATE);
return truncated;
}
}
public static Date truncate(Object date, int field) {
if (date == null) {
throw nullDateIllegalArgumentException();
} else if (date instanceof Date) {
return truncate((Date)date, field);
} else if (date instanceof Calendar) {
return truncate((Calendar)date, field).getTime();
} else {
throw new ClassCastException("Could not truncate " + date);
}
}
说明
truncate(final Date date, final int field)和round差距在于不会四舍五入,截取的常量字段有Calendar.YEAR和
Calendar.MONTH、Calendar.HOUR_OF_DAY、Calendar.DAY_OF_MONTH、Calendar.HOUR、
Calendar.MINUTE等。
Demo
//truncate
System.out.println("truncate:"+format(DateUtils.truncate(now, 1)));
System.out.println("truncate:"+format(DateUtils.truncate(now, 2)));
1.1 getFragmentInDays
源码
public static long getFragmentInDays(Date date, int fragment) {
return getFragment(date, fragment, TimeUnit.DAYS);
}
private static long getFragment(Date date, int fragment, TimeUnit unit) {
validateDateNotNull(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return getFragment(calendar, fragment, unit);
}
private static long getFragment(Calendar calendar, int fragment, TimeUnit unit) {
if (calendar == null) {
throw nullDateIllegalArgumentException();
} else {
long result = 0L;
int offset = unit == TimeUnit.DAYS ? 0 : 1;
switch(fragment) {
case 1:
result += unit.convert((long)(calendar.get(6) - offset), TimeUnit.DAYS);
break;
case 2:
result += unit.convert((long)(calendar.get(5) - offset), TimeUnit.DAYS);
}
switch(fragment) {
case 1:
case 2:
case 5:
case 6:
result += unit.convert((long)calendar.get(11), TimeUnit.HOURS);
case 11:
result += unit.convert((long)calendar.get(12), TimeUnit.MINUTES);
case 12:
result += unit.convert((long)calendar.get(13), TimeUnit.SECONDS);
case 13:
result += unit.convert((long)calendar.get(14), TimeUnit.MILLISECONDS);
case 14:
return result;
case 3:
case 4:
case 7:
case 8:
case 9:
case 10:
default:
throw new IllegalArgumentException("The fragment " + fragment + " is not supported");
}
}
}
说明
getFragmentInDays(final Date date, final int fragment)获取指定时间的天数,fragment可以是
Calendar.YEAR获取年已经过了多少天,同理,Calendar.MONTH月份过去了多少天,当然还
有getFragmentInSeconds过去多少秒,getFragmentInMinutes过去多少分钟,getFragmentInHours
过去多少小时等
Demo
System.out.println(DateUtils.getFragmentInDays(new Date(), Calendar.YEAR));
System.out.println(DateUtils.getFragmentInDays(new Date(), Calendar.MONTH));
1.1 truncatedEquals
源码
public static boolean truncatedEquals(Calendar cal1, Calendar cal2, int field) {
return truncatedCompareTo(cal1, cal2, field) == 0;
}
public static boolean truncatedEquals(Date date1, Date date2, int field) {
return truncatedCompareTo(date1, date2, field) == 0;
}
public static int truncatedCompareTo(Calendar cal1, Calendar cal2, int field) {
Calendar truncatedCal1 = truncate(cal1, field);
Calendar truncatedCal2 = truncate(cal2, field);
return truncatedCal1.compareTo(truncatedCal2);
}
public static int truncatedCompareTo(Date date1, Date date2, int field) {
Date truncatedDate1 = truncate(date1, field);
Date truncatedDate2 = truncate(date2, field);
return truncatedDate1.compareTo(truncatedDate2);
}
说明
truncatedEquals(final Date date1, final Date date2, final int field)可以比较年,月,日等日历字段。
Demo
System.out.println(DateUtils.truncatedEquals(new Date(), new Date(), Calendar.YEAR));