CommonLang3中的DateUtils的Api源码解读

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));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值