DateUtils时间工具类探究

     首先声明一下,这个DateUtils工具类不是自己写的,而是在commons-lang-2.Xjar包或是commons-lang3-3.X.jar包中,具体在哪个jar包中,看程序具体添加了哪个版本的jar包。

     这个工具类有很多实用的静态方法可以供我们直接调用。

1.返回前、后N年(月、周、日、小时、分钟、秒、毫秒)的日期:

//返回前或者后Math.abs(amount)年的日期,如果是前的话,amount<0;如果是后的话,则amount>0
public static Date addYears(final Date date, final int amount)
//返回前或者后Math.abs(amount)月的日期,如果是前的话,amount<0;如果是后的话,则amount>0
public static Date addMonths(final Date date, final int amount)
//返回前或者后Math.abs(amount)周的日期,如果是前的话,amount<0;如果是后的话,则amount>0
public static Date addWeeks(final Date date, final int amount)
//返回前或者后Math.abs(amount)日的日期,如果是前的话,amount<0;如果是后的话,则amount>0     
public static Date addDays(final Date date, final int amount)
//返回前或者后Math.abs(amount)小时的日期,如果是前的话,amount<0;如果是后的话,则amount>0
public static Date addHours(final Date date, final int amount)
//返回前或者后Math.abs(amount)分钟的日期,如果是前的话,amount<0;如果是后的话,则amount>0
public static Date addMinutes(final Date date, final int amount)
//返回前或者后Math.abs(amount)秒的日期,如果是前的话,amount<0;如果是后的话,则amount>0
public static Date addSeconds(final Date date, final int amount)
//返回前或者后Math.abs(amount)毫秒的日期,如果是前的话,amount<0;如果是后的话,则amount>0
public static Date addMilliseconds(final Date date, final int amount)

2.判断两个日期对象或者两个日历对象是否是同一天或者是否是同一时刻:

public static boolean isSameDay(final Date date1, final Date date2)
public static boolean isSameDay(final Calendar cal1, final Calendar cal2)
public static boolean isSameInstant(final Date date1, final Date date2)
public static boolean isSameInstant(final Calendar cal1, final Calendar cal2)
3.按指定格式解析日期字符串得到日期对象,内部封装了SimpleDateFormat类的使用:

public static Date parseDate(final String str, final String... parsePatterns)
public static Date parseDateStrictly(final String str, final String... parsePatterns)
4.截断一个日期对象,得到一个新的日期对象。或者截断一个日历对象,得到一个新的日历对象,具体传什么field参数,得到什么样的日期对象,看api:

public static Date truncate(final Date date, final int field)
public static Calendar truncate(final Calendar date, final int field)
      值得注意的是,DateUitls工具类提供了解析日期字符串成日期对象的方法,但是没有提供格式化日期对象成日期字符串的方法,所以解析字符串时可以用DateUtils工具类,格式化日期对象时就得自己写SimpleDateFormat类操作了。

      另外,还有一个常用方法DateUtils没有封装,那就是取两个日期对象之间的天数或者说去两个日历对象之间的天数:

public static int getDaysBetween(Date date1, Date date2) {
	// 把日期对象天后面的数据都清掉,如原来是2016-08-04 11:49:50,处理完后是2016-08-04 00:00:00
	date1 = DateUtils.truncate(date1, Calendar.DAY_OF_MONTH);
	date2 = DateUtils.truncate(date2, Calendar.DAY_OF_MONTH);
	Float between = (date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000f);
	return between.intValue();
}
以上封装的方法返回的是date1与date2之间的天数,如果date1比date2早,则返回负值。由此,本方法还可以看两个日期对象谁先谁后。但是如果想得到的永远都不是负值的话,在最后一行代码处直接再调用Math.abs()就好了,那就不能判断出谁先谁后了,具体怎么封装返回值看具体需求。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值