整理了一下自己开发过程中经常使用到的一个时间类,当做工具类使用
package com.lzb.common; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * * 功能描述:时间操作类 * * @author lizhenbin * * <p>修改历史:(修改人,修改时间,修改原因/内容)</p> */ public class DateUtil { public static final Long MILI_SECOND = 1000L; public static final Long MILI_MINUTE = MILI_SECOND * 60L; public static final Long MILI_HOUR = MILI_MINUTE * 60L; public static final Long MILI_DATE = MILI_HOUR * 24L; public static final Long MILI_MONTH = MILI_DATE * 30L; public static final Long MILI_YEAR = MILI_MONTH * 365L; public static DateUtil instance = null; public DateUtil() {}; public static synchronized DateUtil getInstance() { if(instance == null) instance = new DateUtil(); return instance; } /** * * 功能描述:获取时间的时间格式字符串 * * @author lizhenbin * <p>创建日期 :2012-5-31 上午11:11:06</p> * * @param date 要格式化的时间 * @param formatType 格式化形式 * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public String getDateByStr(Date date, String formatType) { isDateCheck(date, formatType); DateFormat sdf = new SimpleDateFormat(formatType); return sdf.format(date); } /** * * 功能描述:将时间格式字符串,转换成对应的时间 * * @author lizhenbin * <p>创建日期 :2012-5-9 下午8:29:53</p> * * @param dateStr 时间格式字符串 * @param formatType 格式化类型 * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public Date createDateByformateStr(String dateStr, String formatType) { isDateCheck(dateStr, formatType); DateFormat sdf = new SimpleDateFormat(formatType); try { return sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * * 功能描述:将时间格式字符串转化为时间类型,只支持完整类型:(yyyy{?}MM{?}dd{?}HH{?}mm{?}ss) * * @author lizhenbin * <p>创建日期 :2012-5-10 上午1:18:06</p> * * @param dateStr 时间格式字符串 * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public Date createDateByformateStr(String dateStr) { isDateCheck(dateStr); List<String> symlist = new ArrayList<String>(); for(int i=0; i < dateStr.length(); i++) { char ch = dateStr.charAt(i); if(ch < '0' || ch > '9') symlist.add(String.valueOf(ch)); } StringBuffer sb = new StringBuffer(); sb.append("yyyy" + symlist.get(0) + "MM" + symlist.get(1) + "dd" + symlist.get(2) + "HH" + symlist.get(3) + "mm" + symlist.get(4) + "ss"); DateFormat sdf = new SimpleDateFormat(sb.toString()); try { return sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * * 功能描述:获取时间的毫秒数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:09:44</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeMiliSecond(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.MILLISECOND); } /** * * 功能描述:获取时间的秒数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:17:57</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeSecond(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.SECOND); } /** * * 功能描述:获取时间的分数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:18:52</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeMinute(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.MINUTE); } /** * * 功能描述:获取时间的小时数(12小时制) * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:20:17</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTime12Hour(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.HOUR); } /** * * 功能描述:获取时间的小时数(24小时制) * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:23:39</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTime24Hour(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.HOUR_OF_DAY); } /** * * 功能描述:获取时间在当前星期的第几天 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:25:09</p> * * @param date * @return 返回星期数,其中: 1表示星期一, ...7表示星期天 * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeDateOfWeek(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); int week = calender.get(Calendar.DAY_OF_WEEK) - 1; if(week == 0) week = 7; return week; } /** * * 功能描述:获取当前星期在当前月份中的第几个星期 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:26:29</p> * * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeWeekOfMonth(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.WEEK_OF_MONTH); } /** * * 功能描述:获取当前星期在该年中的第几个星期 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:27:42</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int geTimetWeekOfYear(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.WEEK_OF_YEAR); } /** * * 功能描述:获取当前时间在当月中的第几天 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:29:41</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeDateOfMonth(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.DAY_OF_MONTH); } /** * * 功能描述:获取当前时间在当年中的第几天 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:30:58</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeDateOfYear(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.DAY_OF_YEAR); } /** * * 功能描述:获取当前月份 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:32:40</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getTimeMonth(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return (calender.get(Calendar.MONTH) + 1); } /** * * 功能描述:获取当前年份 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:33:53</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public int getYear(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); return calender.get(Calendar.YEAR); } /** * * 功能描述:计算两个时间的差值 * * @author lizhenbin * <p>创建日期 :2012-5-9 下午11:50:19</p> * * @param basetime 基本时间 * @param targettime 目标时间 * @return 连个时间的差值,单位:毫秒 * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public long subTimeMiliSecond(Date basetime, Date targettime) { isDateCheck(basetime, targettime); return targettime.getTime() - basetime.getTime(); } /** * * 功能描述:返回两个时间相差的秒数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:42:09</p> * * @param basetime * @param targettime * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public long subTimeSecond(Date basetime, Date targettime) { isDateCheck(basetime, targettime); return subTimeMiliSecond(basetime, targettime)/MILI_SECOND; } /** * * 功能描述:返回两个时间相差的分数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:46:23</p> * * @param basetime * @param targettime * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public long subTimeMinute(Date basetime, Date targettime) { isDateCheck(basetime, targettime); return subTimeMiliSecond(basetime, targettime)/MILI_MINUTE; } /** * * 功能描述:获取两个时间相差的小时数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:47:05</p> * * @param basetime * @param targettime * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public long subTimeHour(Date basetime, Date targettime) { isDateCheck(basetime, targettime); return subTimeMiliSecond(basetime, targettime)/MILI_HOUR; } /** * * 功能描述:获取两个时间相差的天数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:47:50</p> * * @param basetime * @param targettime * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public long subTimeDate(Date basetime, Date targettime) { return subTimeMiliSecond(basetime, targettime)/MILI_DATE; } /** * * 功能描述:两个时间相差月数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:50:29</p> * * @param basetime * @param targettime * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public long subTimeMonth(Date basetime, Date targettime) { isDateCheck(basetime, targettime); return subTimeMiliSecond(basetime, targettime)/MILI_MONTH; } /** * * 功能描述:两个时间相差年数 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午12:51:17</p> * * @param basetime * @param targettime * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public long subTimeYear(Date basetime, Date targettime) { isDateCheck(basetime, targettime); return subTimeMiliSecond(basetime, targettime)/MILI_YEAR; } /** * * 功能描述:获取时间的后一天时间 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午10:57:18</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public Date getNextDate(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); calender.add(calender.DATE, 1); return calender.getTime(); } /** * * 功能描述:获取时间的后面几天 * * @author lizhenbin * <p>创建日期 :2012-5-31 上午11:09:02</p> * * @param date 要计算的时间 * @param discount 时间与目标时间的差值 * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public Date getNextTime(Date date, int discount) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); calender.add(calender.DATE, discount); return calender.getTime(); } /** * * 功能描述:获取前一天 * * @author lizhenbin * <p>创建日期 :2012-5-31 上午11:25:13</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public Date getBeforeDate(Date date) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); calender.add(calender.DATE, -1); return calender.getTime(); } /** * * 功能描述:获取时间的前面几天 * * @author lizhenbin * <p>创建日期 :2012-5-31 上午11:09:27</p> * * @param date * @param discount * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public Date getBeforeTime(Date date, int discount) { isDateCheck(date); Calendar calender = Calendar.getInstance(); calender.setTime(date); calender.add(calender.DATE, -discount); return calender.getTime(); } // public static void main(String[] args) { // // DateUtil d = DateUtil.getInstance(); // System.out.println(d.getBeforeDate(new Date())); // } /** * * 功能描述:验证时间是否为空 * * @author lizhenbin * <p>创建日期 :2012-5-10 上午1:22:29</p> * * @param date * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ private boolean isDateCheck(Date date) { if(date==null) { System.out.println("Usage: Input Date is Null."); return false; } return true; } private boolean isDateCheck(String str) { if(str==null) { System.out.println("Usage: Input Str is Null."); return false; } return true; } private boolean isDateCheck(Date base, Date tagert) { if(base==null) { System.out.println("Usage: Input Base Date is Null."); return false; } if(tagert==null) { System.out.println("Usage: Input Tagert Date is Null."); return false; } return true; } private boolean isDateCheck(String base, String tagert) { if(base==null) { System.out.println("Usage: Input Base Str is Null."); return false; } if(tagert==null) { System.out.println("Usage: Input Tagert Tagert is Null."); return false; } return true; } private boolean isDateCheck(Date date, String type) { if(date==null) { System.out.println("Usage: Input Date is Null."); return false; } if(type==null || type.equals("")) { System.out.println("Usage: Input Str is Null."); return false; } return true; } }