让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】

来源:互联网 发布:我的世界,java.net 编辑:程序博客网 时间:2024/06/05 14:41

DateFormatUtils 

//原来项目中是这样写的:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String nowDay = sdf.format(new Date());//现在可以这样写:String nowDay = DateFormatUtils.format(nowDay,"yyyy-MM-dd HH:mm:ss");//DateFormatUtils预定义的日期格式有9种之多,基本能满足项目时间格式化的要求,当然也可以自己自定义格式:public static final FastDateFormat ISO_DATETIME_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss");public static final FastDateFormat ISO_DATETIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ");public static final FastDateFormat ISO_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd");public static final FastDateFormat ISO_DATE_TIME_ZONE_FORMAT = FastDateFormat.getInstance("yyyy-MM-ddZZ");public static final FastDateFormat ISO_TIME_FORMAT = FastDateFormat.getInstance("'T'HH:mm:ss");public static final FastDateFormat ISO_TIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("'T'HH:mm:ssZZ");public static final FastDateFormat ISO_TIME_NO_T_FORMAT = FastDateFormat.getInstance("HH:mm:ss");public static final FastDateFormat ISO_TIME_NO_T_TIME_ZONE_FORMAT = FastDateFormat.getInstance("HH:mm:ssZZ");//所以上面的也可以这样写:DateFormatUtils.ISO_DATETIME_FORMAT.format(date);
DateUtils
DateUtils提供了很多很方便的功能,减轻了使用Date的复杂性。把原来需用Calendar才能完成的功能统一集中了起来,也就是说没有对应的CalendarUtils类。在JDK中,Date与Calendar概念本身就有些混淆,只是为了保持兼容性才引入的Calendar。相对于Calendar提供的方法,DateUtils提供了更加合理的方法,
对时间的单个字段操作变得更加的容易。如需要修改时间Date的某个字段,必须先获得Date对象实例,再传入Calendar,才能修改,如:

//方法已经过时了public static Date add(Date date, int calendarField, int amount) { if (date == null) { throw new IllegalArgumentException("The date must not be null"); } Calendar c = Calendar.getInstance(); c.setTime(date); c.add(calendarField, amount); return c.getTime(); }
在这方面commons-lang的确做得很完善,现在可以这样写:

/**    * @Description: 给当前日期的特定字段,进行增量设置,0为当前,1 为 +1,-1 -1 4  addYears(new Date(), 1) 输出2016     */    public static Date addYears(Date date, int amount)     public static Date addMonths(Date date, int amount)     public static Date addWeeks(Date date, int amount)     public static Date addDays(Date date, int amount)     public static Date addHours(Date date, int amount)     public static Date addMinutes(Date date, int amount)     public static Date addSeconds(Date date, int amount)     public static Date addMilliseconds(Date date, int amount)     public static Date add(Date date, int calendarField, int amount) {        if (date == null) {            throw new IllegalArgumentException("The date must not be null");        }        Calendar c = Calendar.getInstance();        c.setTime(date);        c.add(calendarField, amount);        return c.getTime();    }    /**    * @Description: 全量设置日期特定字段,    * @date:2015年9月18日上午11:41:35    * eg:  setYears(new Date(), 2015)     */    public static Date setYears(Date date, int amount)     public static Date setMonths(Date date, int amount)     public static Date setDays(Date date, int amount)     public static Date setHours(Date date, int amount)    public static Date setMinutes(Date date, int amount)    public static Date setSeconds(Date date, int amount)    public static Date setMilliseconds(Date date, int amount)    private static Date set(Date date, int calendarField, int amount) {        if (date == null) {            throw new IllegalArgumentException("The date must not be null");        }        Calendar c = Calendar.getInstance();        c.setLenient(false);        c.setTime(date);        c.set(calendarField, amount);        return c.getTime();    }
 方法名也非常的直观,使用也更加方便了。但有一些方法不是很好理解,就像下面这个函数:
public static long getFragmentInSeconds(Date date,int fragment)这个方法的作用是:返回一个指定时间的秒数。关键的是参数fragment,它的作用非常重要。它的值必须是Calendar的时间常量字段。如Calendar.MONTH ,需要注意的是,小时必须用24小时制的,即Calendar.HOUR_OF_DAY ,而不能用Calendar.HOUR字段。/** 如现在是2014-10-23 13:27:00,那么* DateUtils.getFragmentInDays(new Date(), Calendar.MONTH)返回23,表示从当月起已经过去23天了,* DateUtils.getFragmentInDays(new Date(), Calendar.YEAR)返回296,表示从当年起已经过去296天了,* DateUtils.getFragmentInHours(new Date(), Calendar.DATE)返回13,表示从今天起已经过去13个小时了*/public static long getFragmentInSeconds(Date date,int fragment)这个方法的作用是:返回一个指定时间的秒数。关键的是参数fragment,它的作用非常重要。它的值必须是Calendar的时间常量字段。如Calendar.MONTH ,需要注意的是,小时必须用24小时制的,即Calendar.HOUR_OF_DAY ,而不能用Calendar.HOUR字段。/** 如现在是2014-10-23 13:27:00,那么* DateUtils.getFragmentInDays(new Date(), Calendar.MONTH)返回23,表示从当月起已经过去23天了,* DateUtils.getFragmentInDays(new Date(), Calendar.YEAR)返回296,表示从当年起已经过去296天了,* DateUtils.getFragmentInHours(new Date(), Calendar.DATE)返回13,表示从今天起已经过去13个小时了*/
当然在DateUtils也有一些一看就知道是做什么的函数,我在这里列一下,不具体给例子了:

@Description: 判断是否是同一天public static boolean isSameDay(Calendar cal1, Calendar cal2)@Description: Date 转 Calendarpublic static Calendar toCalendar(Date date);@Description:  从日期特定字段开始四舍五入public static Calendar round(Calendar date, int field);* @Description: 格式化截取日期,从给定字段开始public static Date truncate(Date date, int field);@Description: 从日期特定字段开始向上舍入public static Date ceiling(Date date, int field);eg :    假设当前时间 2015-09-14        ceiling(new Date(),Calendar.MONTH); 输出 2015-10-01    round(new Date(), Calendar.MONTH);  输出 2015-09-01        假设当前时间 2015-09-16,超过半月,上面输出结果是一致的@Description: 比较日历对应字段是否相等public static boolean truncatedEquals(Calendar cal1, Calendar cal2, int field);

转载:http://www.cnblogs.com/java-class/p/4845962.html



阅读全文
0 0
原创粉丝点击