时间工具类(DateUtil)
来源:互联网 发布:javascript算术运算符 编辑:程序博客网 时间:2024/05/16 01:37
[java] view plaincopyprint? /** * UtilsTest * 时间日期工具类,封装工作中常用的一些时间日期计算方法等 * 还可以提供更多的重载方法,用于时间的转化等 */ package com.labci.util.test; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * @author Bill Tu(tujiyue/iwtxokhtd) * Jun 6, 2011[9:25:21 PM] * */ public class DateUtil { private DateUtil(){ } private static final String hhmmFormat="HH:mm"; private static final String MMddFormat="MM-dd"; private static final String yyyyFormat="yyyy"; private static final String yyyyChineseFormat="yyyy年"; private static final String yyyyMMddFormat="yyyy-MM-dd"; private static final String fullFormat="yyyy-MM-dd HH:mm:ss"; private static final String MMddChineseFormat="MM月dd日"; private static final String yyyyMMddChineseFormat="yyyy年MM月dd日"; private static final String fullChineseFormat="yyyy年MM月dd日 HH时mm分ss秒"; private static final String [] WEEKS={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; /** * 得到指定时间的时间日期格式 * @param date 指定的时间 * @param format 时间日期格式 * @return */ public static String getFormatDateTime(Date date,String format){ DateFormat df=new SimpleDateFormat(format); return df.format(date); } /** * 判断是否是润年 * @param date 指定的时间 * @return true:是润年,false:不是润年 */ public static boolean isLeapYear(Date date) { Calendar cal=Calendar.getInstance(); cal.setTime(date); return isLeapYear(cal.get(Calendar.YEAR)); } /** * 判断是否是润年 * @param date 指定的年 * @return true:是润年,false:不是润年 */ public static boolean isLeapYear(int year) { GregorianCalendar calendar = new GregorianCalendar(); return calendar.isLeapYear(year); } /** * 判断指定的时间是否是今天 * @param date 指定的时间 * @return true:是今天,false:非今天 */ public static boolean isInToday(Date date){ boolean flag=false; Date now=new Date(); String fullFormat=getFormatDateTime(now,DateUtil.yyyyMMddFormat); String beginString=fullFormat+" 00:00:00"; String endString=fullFormat+" 23:59:59"; DateFormat df=new SimpleDateFormat(DateUtil.fullFormat); try { Date beginTime=df.parse(beginString); Date endTime=df.parse(endString); flag=date.before(endTime)&&date.after(beginTime); } catch (ParseException e) { e.printStackTrace(); } return flag; } /** * 判断两时间是否是同一天 * @param from 第一个时间点 * @param to 第二个时间点 * @return true:是同一天,false:非同一天 */ public static boolean isSameDay(Date from,Date to){ boolean isSameDay=false; DateFormat df=new SimpleDateFormat(DateUtil.yyyyMMddFormat); String firstDate=df.format(from); String secondDate=df.format(to); isSameDay=firstDate.equals(secondDate); return isSameDay; } /** * 求出指定的时间那天是星期几 * @param date 指定的时间 * @return 星期X */ public static String getWeekString(Date date){ return DateUtil.WEEKS[getWeek(date)-1]; } /** * 求出指定时间那天是星期几 * @param date 指定的时间 * @return 1-7 */ public static int getWeek(Date date){ int week=0; Calendar cal=Calendar.getInstance(); cal.setTime(date); week=cal.get(Calendar.DAY_OF_WEEK); return week; } /** * 取得指定时间离现在是多少时间以前,如:3秒前,2小时前等 * 注意:此计算方法不是精确的 * @param date 已有的指定时间 * @return 时间段描述 */ public static String getAgoTimeString(Date date){ Date now=new Date(); Calendar cal=Calendar.getInstance(); cal.setTime(date); Date agoTime=cal.getTime(); long mtime=now.getTime()-agoTime.getTime(); String str=""; long stime=mtime/1000; long minute=60; long hour=60*60; long day=24*60*60; long weeks=7*24*60*60; long months=100*24*60*60; if(stime<minute){ long time_value=stime; if(time_value<=0){ time_value=1; } str=time_value+"秒前"; }else if(stime>=minute && stime<hour){ long time_value=stime/minute; if(time_value<=0){ time_value=1; } str=time_value+"分前"; }else if(stime>=hour && stime<day){ long time_value=stime/hour; if(time_value<=0){ time_value=1; } str=time_value+"小时前"; }else if(stime>=day&&stime<weeks){ long time_value=stime/day; if(time_value<=0){ time_value=1; } str=time_value+"天前"; }else if(stime>=weeks&&stime<months){ DateFormat df=new SimpleDateFormat(DateUtil.MMddFormat); str=df.format(date); }else{ DateFormat df=new SimpleDateFormat(DateUtil.yyyyMMddFormat); str=df.format(date); } return str; } /** * 判断指定时间是否是周末 * @param date 指定的时间 * @return true:是周末,false:非周末 */ public static boolean isWeeks(Date date){ boolean isWeek=false; isWeek=(getWeek(date)-1==0||getWeek(date)-1==6); return isWeek; } /** * 得到今天的最开始时间 * @return 今天的最开始时间 */ public static Date getTodayBeginTime(){ String beginString=DateUtil.yyyyMMddFormat+" 00:00:00"; DateFormat df=new SimpleDateFormat(DateUtil.fullFormat); Date beginTime=new Date(); try { beginTime=df.parse(beginString); } catch (ParseException e) { e.printStackTrace(); } return beginTime; } /** * 得到今天的最后结束时间 * @return 今天的最后时间 */ public static Date getTodayEndTime(){ String endString=DateUtil.yyyyMMddFormat+" 23:59:59"; DateFormat df=new SimpleDateFormat(DateUtil.fullFormat); Date endTime=new Date(); try { endTime=df.parse(endString); } catch (ParseException e) { e.printStackTrace(); } return endTime; } /** * 取得本周的开始时间 * @return 本周的开始时间 */ public static Date getThisWeekBeginTime(){ Date beginTime=null; Calendar cal=Calendar.getInstance(); int week=getWeek(cal.getTime()); week=week-1; int days=0; if(week==0){ days=6; }else{ days=week-1; } cal.add(Calendar.DAY_OF_MONTH, -days); beginTime=cal.getTime(); return beginTime; } /** * 取得本周的开始日期 * @param format 时间的格式 * @return 指定格式的本周最开始时间 */ public static String getThisWeekBeginTimeString(String format){ DateFormat df=new SimpleDateFormat(format); return df.format(getThisWeekBeginTime()); } /** * 取得本周的结束时间 * @return 本周的结束时间 */ public static Date getThisWeekEndTime(){ Date endTime=null; Calendar cal=Calendar.getInstance(); int week=getWeek(cal.getTime()); week=week-1; int days=0; if(week!=0){ days=7-week; } cal.add(Calendar.DAY_OF_MONTH, days); endTime=cal.getTime(); return endTime; } /** * 取得本周的结束日期 * @param format 时间的格式 * @return 指定格式的本周结束时间 */ public static String getThisWeekEndTimeString(String format){ DateFormat df=new SimpleDateFormat(format); return df.format(getThisWeekEndTime()); } /** * 取得两时间相差的天数 * @param from 第一个时间 * @param to 第二个时间 * @return 相差的天数 */ public static long getBetweenDays(Date from, Date to){ long days=0; long dayTime=24*60*60*1000; long fromTime=from.getTime(); long toTime=to.getTime(); long times=Math.abs(fromTime-toTime); days=times/dayTime; return days; } /** * 取得两时间相差的小时数 * @param from 第一个时间 * @param to 第二个时间 * @return 相差的小时数 */ public static long getBetweenHours(Date from,Date to){ long hours=0; long hourTime=60*60*1000; long fromTime=from.getTime(); long toTime=to.getTime(); long times=Math.abs(fromTime-toTime); hours=times/hourTime; return hours; } /** * 取得在指定时间上加减days天后的时间 * @param date 指定的时间 * @param days 天数,正为加,负为减 * @return 在指定时间上加减days天后的时间 */ public static Date addDays(Date date,int days){ Date time=null; Calendar cal=Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, days); time=cal.getTime(); return time; } /** * 取得在指定时间上加减months月后的时间 * @param date 指定时间 * @param months 月数,正为加,负为减 * @return 在指定时间上加减months月后的时间 */ public static Date addMonths(Date date,int months){ Date time=null; Calendar cal=Calendar.getInstance(); cal.add(Calendar.MONTH, months); time=cal.getTime(); return time; } /** * 取得在指定时间上加减years年后的时间 * @param date 指定时间 * @param years 年数,正为加,负为减 * @return 在指定时间上加减years年后的时间 */ public static Date addYears(Date date,int years){ Date time=null; Calendar cal=Calendar.getInstance(); cal.add(Calendar.YEAR, years); time=cal.getTime(); return time; } /** * @param args */ public static void main(String[] args) { System.out.println(getFormatDateTime(new Date(),DateUtil.fullChineseFormat)); System.out.println(isLeapYear(new Date())); Calendar cal=Calendar.getInstance(); System.out.println(isInToday(cal.getTime())); Calendar cal2=Calendar.getInstance(); cal2.set(2011, 06, 05); System.out.println(isSameDay(cal.getTime(),cal2.getTime())); System.out.println(getWeekString(new Date())); DateFormat df=new SimpleDateFormat(DateUtil.fullFormat); String fullString="2011-06-03 22:37:20"; try { Date fulldate=df.parse(fullString); System.out.println(getBetweenDays(fulldate,cal.getTime())); System.out.println(getAgoTimeString(fulldate)); System.out.println(isWeeks(fulldate)); } catch (ParseException e) { e.printStackTrace(); } System.out.println(getThisWeekBeginTimeString(DateUtil.yyyyMMddChineseFormat)); System.out.println(getThisWeekEndTimeString(DateUtil.yyyyMMddChineseFormat)); System.out.println(addDays(new Date(),3)); System.out.println(addDays(new Date(),-3)); System.out.println(addMonths(new Date(),2)); System.out.println(addMonths(new Date(),-2)); System.out.println(addYears(new Date(),1)); System.out.println(addYears(new Date(),-1)); } }