package com.cabletech.common.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import org.apache.log4j.Logger; /** * 日期Date工具类 * * @author wangt * */ public class DateUtil { private static String defineDateFormat = "yyyy-MM-dd HH:mm:ss";// 缺省日期格式 private static Logger log = Logger.getLogger(DateUtil.class); /** * 取得系统当前时间,类型为Timestamp * * @return Timestamp */ public static Timestamp getNowTimestamp() { java.util.Date d = new java.util.Date(); Timestamp numTime = new Timestamp(d.getTime()); return numTime; } /** * 取得系统当前时间,类型为Timestamp * * @return Timestamp */ public static String getNowDateString() { java.util.Date date = new java.util.Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); return formatter.format(date); } /** * 获取今年 * * @return */ public static String getNowYearStr() { java.util.Date date = new java.util.Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy"); return formatter.format(date); } /** * 获取今月 * * @return */ public static String getNowMonthStr() { java.util.Date date = new java.util.Date(); SimpleDateFormat formatter = new SimpleDateFormat("MM"); return formatter.format(date); } /** * 取得系统的当前时间,类型为java.sql.Date * * @return java.sql.Date */ public static java.sql.Date getNowDate() { java.util.Date d = new java.util.Date(); return new java.sql.Date(d.getTime()); } /** * 从Timestamp类型转化为yyyy-MM-dd类型的字符串 * * @param date * Timestamp * @param strDefault * String * @return */ public static String TimestampToString(Timestamp date, String strDefault) { String strTemp = strDefault; if (date != null) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); strTemp = formatter.format(date); } return strTemp; } /** * 从Timestamp类型转化为yyyy-MM-dd类型的字符串,如果为null,侧放回"" * * @param date * Timestamp * @return */ public static String TimestampToString(Timestamp date) { return TimestampToString(date, null); } /** * 将日期格式转化成字符串 * * @param date * java.util.Date * @return */ public static String DateToTimeString(java.util.Date date) { String strTemp = null; if (date != null) { SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm"); strTemp = formatter.format(date); } return strTemp; } /** * 将日期格式转化成字符串 * * @param date * java.sql.Date * @return */ public static String DateToString(java.sql.Date date) { return DateToString(date, "yyyy-MM-dd"); } /** * date型转化为String 格式为yyyy-MM-dd * * @param date * java.sql.Date * @param fmt * String * @return */ public static String DateToString(java.sql.Date date, String fmt) { String strTemp = ""; if (date != null) { SimpleDateFormat formatter = new SimpleDateFormat(fmt); strTemp = formatter.format(date); } return strTemp; } /** * 将日期格式转化成字符串 * * @param date * java.util.Date * @return */ public static String DateToString(java.util.Date date) { return DateToString(date, "yyyy-MM-dd"); } /** * date型转化为String 格式为yyyy-MM-dd * * @param date * java.util.Date * @param strFmt * String * @return */ public static String DateToString(java.util.Date date, String strFmt) { String strTemp = ""; if (date != null) { SimpleDateFormat formatter = new SimpleDateFormat(strFmt); strTemp = formatter.format(date); } return strTemp; } /** * 日期格式精确到毫秒级转换为string型 * * @param date * java.util.Date * @param strFormat * 注意这里的格式,yyyy-MM-dd HH:mm:ss * @return 返回此格式yyyy-MM-dd HH:mm:ss字符串 */ public static String DateToTimeString(java.util.Date date, String strFormat) { String strTemp = ""; if (date != null) { SimpleDateFormat formatter = new SimpleDateFormat(strFormat); strTemp = formatter.format(date); } return strTemp; } /** * String转化为Timestamp类型 * * @param strDate * String * @return */ public static Timestamp StringToTimestamp(String strDate) { if (strDate != null && !strDate.equals("")) { try { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date d = formatter.parse(strDate); Timestamp numTime = new Timestamp(d.getTime()); return numTime; } catch (Exception e) { return null; } } else return null; } /** * 将时间字符串转化为java.util.Date格式 * * @param strDate * String 时间字符串 * @param strFmt * String 时间字符串的格式 * @return Date */ public static java.util.Date Str2UtilDate(String strDate, String strFmt) { if (strDate != null && !strDate.equals("")) { try { SimpleDateFormat formatter = new SimpleDateFormat(strFmt); java.util.Date dt = formatter.parse(strDate); return dt; } catch (Exception e) { log.error(e); return null; } } else return null; } /** * 将指定日期转化成指定字符串 * * @param dt * java.util.Date * @param strFmt * String * @return */ public static String UtilDate2Str(java.util.Date dt, String strFmt) { String strDt = null; if (dt != null) { try { SimpleDateFormat formatter = new SimpleDateFormat(strFmt); strDt = formatter.format(dt); } catch (Exception e) { log.error(e); } } return strDt; } /** * 获取指定格式的Sysdate字符串 * * @param strFmt * String * @return */ public static String getNowDateString(String strFmt) { String strDt = null; java.util.Date dt = new java.util.Date(); SimpleDateFormat formatter = new SimpleDateFormat(strFmt); strDt = formatter.format(dt); return strDt; } /** * String转化为java.sql.date类型, * * @param strDate * String * @param strFmt * String * @return */ public static java.sql.Date StringToDate(String strDate, String strFmt) { if (strDate != null && !strDate.equals("")) { try { SimpleDateFormat formatter = new SimpleDateFormat(strFmt); java.util.Date d = formatter.parse(strDate); java.sql.Date numTime = new java.sql.Date(d.getTime()); return numTime; } catch (Exception e) { log.error(e); return null; } } else return null; } /** * String转化为java.util.date类型, * * @param strDate * String * @param strFmt * String * @return */ public static java.util.Date StringToUtilDate(String strDate, String strFmt) { if (strDate != null && !strDate.equals("")) { try { SimpleDateFormat formatter = new SimpleDateFormat(strFmt); return formatter.parse(strDate); } catch (Exception e) { log.error(e); return null; } } else return null; } /** * String转化为java.sql.date类型, * * @param strDate * String * @return */ public static java.sql.Date StringToDate(String strDate) { if (strDate != null && !strDate.equals("")) { try { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date d = formatter.parse(strDate); java.sql.Date numTime = new java.sql.Date(d.getTime()); return numTime; } catch (Exception e) { log.error(e); return null; } } else return null; } /** * 取得年月日 * * @param type * int * @param dateStr * String * @return String[] */ public static String[] parseStringForDate(int type, String dateStr) { String[] dateArr = new String[6]; // type : 1, "2004/05/06" 2, "2004/05/06 11:22:33" , 3, "11:22:33" if (type == 1) { dateArr[0] = dateStr.substring(0, 4); dateArr[1] = dateStr.substring(5, 7); dateArr[2] = dateStr.substring(8, 10); } else { if (type == 2) { dateArr[0] = dateStr.substring(0, 4); dateArr[1] = dateStr.substring(5, 7); dateArr[2] = dateStr.substring(8, 10); dateArr[3] = dateStr.substring(11, 13); dateArr[4] = dateStr.substring(14, 16); dateArr[5] = dateStr.substring(17, 19); } else { if (type == 3) { dateArr[0] = dateStr.substring(0, 2); dateArr[1] = dateStr.substring(3, 5); dateArr[2] = dateStr.substring(6, 8); } } } return dateArr; } /** * 得到当前年 * * @since 1.0 * @return 返回当前年(YYYY) */ public static int getYear() { return Calendar.getInstance().get(Calendar.YEAR); } /** * 得到当前月 * * @since 1.0 * @return 返回当前月(1~12) */ public static int getMonth() { return Calendar.getInstance().get(Calendar.MONTH) + 1; } /** * 获取给定日期的月 * * @param date * Date * @return */ public static int getMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.MONTH) + 1; } /** * 得到当前日 * * @since 1.0 * @return 返回当前日(1~31) */ public static int getDay() { return Calendar.getInstance().get(Calendar.DAY_OF_MONTH); } /** * 将字符串按指定格式解析成日期对象 * * @since 1.1 * @param dateStr * 需要进行转换的日期字符串 * @param pattern * 日期字符串的格式 * @return "yyyy-MM-dd HH:mm:ss"形式的日期对象 */ public static java.util.Date parseDate(String dateStr, String pattern) { SimpleDateFormat DATEFORMAT = new SimpleDateFormat(defineDateFormat); DATEFORMAT.applyPattern(pattern); java.util.Date ret = null; try { ret = DATEFORMAT.parse(dateStr); } catch (Exception e) { log.error(e); } DATEFORMAT.applyPattern(defineDateFormat); return ret; } /** * 计算两日期间相差天数. * * @since 1.1 * @param d1 * 日期字符串 * @param d2 * 日期字符串 * @return long 天数 */ public static long signDaysBetweenTowDate(String d1, String d2) { java.sql.Date dd1 = null; java.sql.Date dd2 = null; long result = -1l; try { dd1 = java.sql.Date.valueOf(d1); dd2 = java.sql.Date.valueOf(d2); result = signDaysBetweenTowDate(dd1, dd2); } catch (Exception ex) { result = -1; } return result; } /** * 计算两日期间相差天数. * * @since 1.1 * @param d1 * 开始日期 日期型 * @param d2 * 结束日期 日期型 * @return long 天数 */ public static long signDaysBetweenTowDate(java.sql.Date d1, java.sql.Date d2) { return (d1.getTime() - d2.getTime()) / (3600 * 24 * 1000); } /** * 获取季度日期 * * @param year * String * @param season * int * @param isstart * boolean * @return */ public static String getSeasonTime(String year, int season, boolean isstart) { int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } }; int start_month = array[season - 1][0]; int end_month = array[season - 1][2]; int years_value = Integer.parseInt(year); int start_days = 1; int end_days = getLastDayOfMonth(years_value, end_month); String seasonDate = ""; if (isstart) { seasonDate = year + "-" + start_month + "-" + start_days; } else { seasonDate = year + "-" + end_month + "-" + end_days; } return seasonDate; } /** * 获取某月日期 * * @param year * String * @param month * int * @param isstart * boolean * @return */ public static String getMonthTime(String year, int month, boolean isstart) { int years_value = Integer.parseInt(year); int start_days = 1; int end_days = getLastDayOfMonth(years_value, month); String seasonDate = ""; if (isstart) { seasonDate = year + "-" + month + "-" + start_days; } else { seasonDate = year + "-" + month + "-" + end_days; } return seasonDate; } /** * 获取某年某月的最后一天 * * @param year * 年 * @param month * 月 * @return 最后一天 */ public static int getLastDayOfMonth(int year, int month) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } if (month == 2) { if (isLeapYear(year)) { return 29; } else { return 28; } } return 0; } /** * 是否闰年 * * @param year * 年 * @return */ public static boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } /** * 判断当前日期是否在许可的日期范围之中 * * @param dateStr * String * @param spaceDays * long * @return */ public static boolean compare(String dateStr, long spaceDays) { // TODO Auto-generated method stub java.util.Date date = Str2UtilDate(dateStr, "yyyy-MM-dd"); java.util.Date nowDate = new java.util.Date(); long s = nowDate.getTime() - date.getTime(); s = s / (24 * 60 * 60 * 1000); if (s <= spaceDays) return true; else return false; } /** * 获取本周时间段 * @return HashMap<startTime,endTime> */ public static HashMap<String,String> getWeekSlot(){ HashMap<String,String> map = new HashMap<String,String>(); Date nowdate= new Date(); SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal=Calendar.getInstance(); cal.set(Calendar.YEAR, getYear()); cal.set(Calendar.MONTH,getMonth()); Date date=cal.getTime(); // 减去离上周日有几天的天数 cal.add(Calendar.DATE, -(cal.get(cal.DAY_OF_WEEK)-1)); map.put("startTime", df.format(date)); cal.add(Calendar.DATE, cal.DAY_OF_WEEK); date=cal.getTime(); map.put("endTime", df.format(date)); return map; } /** * 获取本月时间段 * @return HashMap<startTime,endTime> */ public static HashMap<String,String> getMonthSlot(){ HashMap<String,String> map = new HashMap<String,String>(); Date nowdate= new Date(); SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal=Calendar.getInstance(); cal.set(Calendar.YEAR, getYear()); cal.set(Calendar.MONTH, getMonth()-1); cal.add(Calendar.DATE, -nowdate.getDate()+1); Date date=cal.getTime(); map.put("startTime", df.format(date)); int lastday=cal.getActualMaximum(Calendar.DAY_OF_MONTH); cal.add(Calendar.DATE, lastday-1); date=cal.getTime(); map.put("endTime", df.format(date)); return map; } /** * 获取本季度时间段 * @return HashMap<startTime,endTime> */ public static HashMap<String,String> getQuarterSlot(){ HashMap<String,String> map = new HashMap<String,String>(); int monthdate = getMonth(); String dateb = ""; String datee = ""; if(monthdate==1||monthdate==2||monthdate==3) { dateb = getYear()+"-1-1"; datee = getYear()+"-3-31"; } if(monthdate==4||monthdate==5||monthdate==6) { dateb = getYear()+"-4-1"; datee =getYear()+"-6-30"; } if(monthdate==7||monthdate==8||monthdate==9) { dateb =getYear()+"-7-1"; datee = getYear()+"-9-31"; } if(monthdate==10||monthdate==11||monthdate==12) { dateb = getYear()+"-10-1"; datee = getYear()+"-12-31"; } map.put("startTime", dateb); map.put("endTime", datee); return map; } /** * 获取本年时间段 * @return HashMap<startTime,endTime> */ public static HashMap<String,String> getYearSlot(){ HashMap<String,String> map = new HashMap<String,String>(); String dateb = ""; String datee = ""; dateb = getYear()+"-1-1"; datee = getYear()+"-12-31"; map.put("startTime", dateb); map.put("endTime", datee); return map; } /** * 获取本年时间段 * @return HashMap<startTime,endTime> */ public static String getPreviousMonth(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); Calendar calendar = Calendar.getInstance(); Date mydate = new Date(); try { mydate = sdf.parse(getNowDateString("yyyy-MM")); } catch (ParseException e) { } calendar.setTime(mydate); calendar.add(Calendar.MONTH, -1); return sdf.format(calendar.getTime())+"-01"; } }