一、StringUtils类
import java.io.UnsupportedEncodingException;import java.math.BigDecimal;import java.util.HashMap;import java.util.Map;import java.util.Set;import java.util.TreeSet;import net.sf.json.JSONObject;import sun.misc.BASE64Decoder;/** * String工具 * 主要对 StringUtils 的一些方法进行重写,达到更方便的使用 * @author cai niao * */public class StringUtils extends org.apache.commons.lang.StringUtils{ /** * 一次性判断多个或单个对象为空。 * @param objects * @author cai niao * @return 只要有一个元素为Blank,则返回true */ public static boolean isBlank(Object...objects){ Boolean result = false ; for (Object object : objects) { if(object == null || "".equals(object.toString().trim()) || "null".equals(object.toString().trim()) || "[null]".equals(object.toString().trim()) || "[]".equals(object.toString().trim())){ result = true ; break ; } } return result ; } /** * 一次性判断多个或单个对象不为空。 * @param objects * @author zhou-baicheng * @return 只要有一个元素不为Blank,则返回true */ public static boolean isNotBlank(Object...objects){ return !isBlank(objects); } public static String checkNullToConvert(Object obj) { return StringUtils.isBlank(obj) ? "" : obj.toString(); } /** * 判断一个字符串在数组中存在几个 * @param baseStr * @param strings * @return */ public static int indexOf(String baseStr,String[] strings){ if(null == baseStr || baseStr.length() == 0 || null == strings) return 0; int i = 0; for (String string : strings) { boolean result = baseStr.equals(string); i = result ? ++i : i; } return i ; } /** * 判断一个字符串是否为JSONObject,是返回JSONObject,不是返回null * @param args * @return */ public static net.sf.json.JSONObject isJSONObject(Object args) { net.sf.json.JSONObject result = null ; if(args instanceof net.sf.json.JSONObject){ return (net.sf.json.JSONObject)args; } if(isBlank(args)){ return result ; } try { return net.sf.json.JSONObject.fromObject(args); } catch (Exception e) { return result ; } } /** * 判断一个字符串是否为JSONArray,是返回JSONArray,不是返回null * @param args * @return */ public static net.sf.json.JSONArray isJSONArray(Object args) { if(args instanceof net.sf.json.JSONArray){ return (net.sf.json.JSONArray)args; } net.sf.json.JSONArray result = null ; if(isBlank(args)){ return result ; } try { return net.sf.json.JSONArray.fromObject(args); } catch (Exception e) { return result ; } } public static String trimToEmpty(Object str){ return (isBlank(str) ? "" : str.toString().trim()); } /** * 将 Strig 进行 BASE64 编码 * @param str [要编码的字符串] * @param bf [true|false,true:去掉结尾补充的'=',false:不做处理] * @return */ public static String getBASE64(String str,boolean...bf) { if (StringUtils.isBlank(str)) return null; String base64 = new sun.misc.BASE64Encoder().encode(str.getBytes()) ; //去掉 '=' if(isBlank(bf) && bf[0]){ base64 = base64.replaceAll("=", ""); } return base64; } /** 将 BASE64 编码的字符串 s 进行解码**/ public static String getStrByBASE64(String s) { if (isBlank(s)) return ""; BASE64Decoder decoder = new BASE64Decoder(); try { byte[] b = decoder.decodeBuffer(s); return new String(b); } catch (Exception e) { return ""; } } /** * 把Map转换成get请求参数类型,如 {"name"=20,"age"=30} 转换后变成 name=20&age=30 * @param map * @return */ public static String mapToGet(Map map){ String result = "" ; if(map == null || map.size() ==0){ return result ; } Set keys = map.keySet(); for (Object key : keys ) { result += ((String)key + "=" + (String)map.get(key) + "&"); } return isBlank(result) ? result : result.substring(0,result.length() - 1); } /** * 把一串参数字符串,转换成Map 如"?a=3&b=4" 转换为Map{a=3,b=4} * @param args * @return */ public static MapgetToMap(String args){ if(isBlank(args)){ return null ; } args = args.trim(); //如果是?开头,把?去掉 if(args.startsWith("?")){ args = args.substring(1,args.length()); } String[] argsArray = args.split("&"); Map result = new HashMap (); for (String ag : argsArray) { if(!isBlank(ag) && ag.indexOf("=")>0){ String[] keyValue = ag.split("="); //如果value或者key值里包含 "="号,以第一个"="号为主 ,如 name=0=3 转换后,{"name":"0=3"}, 如果不满足需求,请勿修改,自行解决. String key = keyValue[0]; String value = "" ; for (int i = 1; i < keyValue.length; i++) { value += keyValue[i] + "="; } value = value.length() > 0 ? value.substring(0,value.length()-1) : value ; result.put(key,value); } } return result ; } /** * 转换成Unicode * @param str * @return */ public static String toUnicode(String str) { String as[] = new String[str.length()]; String s1 = ""; for (int i = 0; i < str.length(); i++) { as[i] = Integer.toHexString(str.charAt(i) & 0xffff); s1 = s1 + "\\u" + as[i]; } return s1; } public static String getDoubleTOString(Double str){ String money = str.toString(); try { Double.parseDouble(money); } catch (Exception e) { BigDecimal bDecimal = new BigDecimal(str); money = bDecimal.toPlainString(); } return money; } /** * 把数组转换成Set 方便判断 * @param objs * @return */ public static TreeSet arrayToSet(String[] objs){ TreeSet result = new TreeSet (); if(null ==objs){ return result ; } for (String obj:objs) { result.add(obj); } return result; } /** * 字符串转urlcode * @param value * @return */ public static String strToUrlcode(String value){ try { value = java.net.URLEncoder.encode(value,"utf-8"); return value ; } catch (UnsupportedEncodingException e) { LoggerUtils.error(StringUtils.class, "字符串转换为URLCode失败,value:" + value,e); e.printStackTrace(); return null; } } /** * urlcode转字符串 * @param value * @return */ public static String urlcodeToStr(String value){ try { value = java.net.URLDecoder.decode(value,"utf-8"); return value ; } catch (UnsupportedEncodingException e) { LoggerUtils.error(StringUtils.class, "URLCode转换为字符串失败;value:" + value,e); e.printStackTrace(); return null; } } /** * 设置JSON字符串返回 * * @param key * @param value * @return */ public static String setJsonString(String key, String value) { if (StringUtils.isNotBlank(key, value)) { JSONObject goodsJson = new JSONObject(); goodsJson.put(key, value); return goodsJson.toString(); } return ""; } /** * 替换字符串 * * @param str * @param nowStr * @param replaceStr * @return */ public static String replaceString(String str, String nowStr, String replaceStr) { nowStr = StringUtils.isBlank(nowStr) ? "" : nowStr; replaceStr = StringUtils.isBlank(replaceStr) ? "" : replaceStr; if (StringUtils.isNotBlank(str)) { return str.replaceAll(nowStr, replaceStr); } return ""; } }
二、DateUtils 类
import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Collections;import java.util.Date;import java.util.GregorianCalendar;import java.util.List;import java.util.Locale;import net.sf.json.JSONObject;import org.apache.log4j.Logger;/** * * 区分 责任人 日期 说明 ** 时间工具类 *
* @author * * */public class DateUtils { private static Logger log = Logger.getLogger(DateUtils.class); /**当前毫秒值*/ public static long NOW_DATE_MIS =getNowTime(); /**根据方法获取**/ public static long getNowTime(){ return new Date().getTime(); } /** * 获取当前时间的年月日时分秒+时间戳后4位 如:20140620123456 18位 * @return */ public static String ymdhms4(){ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String s = sdf.format(date); double a = Math.random() * 9000 + 1000; int result = (int)a; return s + result; } /** * 把一个字符串时间转换为毫秒值 如 2014-12-12 12:12:12 转换为 1406086513619 * @param strDate * @return */ public static long str2DateTime(String strDate){ SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); Date date = new Date(); try { date = df.parse(strDate); } catch (ParseException pe) { pe.getStackTrace(); } return date.getTime() ; } /** * 把一个日期转换为指定的格式 */ public static Date str2Date(String strDate, String formater) { if (strDate == null) { return null; } if (formater == null) { formater = "yyyy-MM-dd"; } SimpleDateFormat df = new SimpleDateFormat(formater); Date date = new Date(); try { date = df.parse(strDate); } catch (ParseException pe) { pe.getStackTrace(); } return date; } /** * 获取最大毫秒值 * @param dateStr 2014-12-12 年-月-日 参数 * @return */ public static Long getMaxMillsByYMD(String dateStr){ if(StringUtils.isBlank(dateStr)){ log.error("getTodayMaxMills error , message :param is empty"); return null; } dateStr = dateStr.trim() + " 23:59:59"; Date date = ymdHmsStr2Date(dateStr); return date.getTime() ; } /** * 获取最小毫秒值 * @param dateStr 2014-12-12 年月日参数 * @return */ public static Long getMinxMillsByYMD(String dateStr){ if(StringUtils.isBlank(dateStr)){ log.error("getTodayMaxMills error , message :param is empty"); return null; } dateStr = dateStr.trim() + " 00:00:00"; Date date = ymdHmsStr2Date(dateStr); return date.getTime() ; } public static String getNextMonth() { Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 1);// 设为当前月的1号 c.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号 return formaterDate(c.getTime(), "yyyy-MM"); } public static String getPreviousMonth() { Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 1);// 设为当前月的1号 c.add(Calendar.MONTH, -1);// 减一个月,变为上月的1号 return formaterDate(c.getTime(), "yyyy-MM"); } public static String getMonth(String date,int num) { Calendar c = Calendar.getInstance(); if(StringUtils.isNotEmpty(date)){ c.setTime(DateUtils.ymdStr2Date(date)); } c.set(Calendar.DATE, 1);// 设为当前月的1号 c.add(Calendar.MONTH, num);// 减一个月,变为上月的1号 return formaterDate(c.getTime(), "yyyy-MM-dd"); } /** * 计算两个日期之间相差的月数 * @param date1 * @param date2 * @return */ public static int getMonths(Date date1, Date date2) { int iMonth = 0; int flag = 0; try { Calendar objCalendarDate1 = Calendar.getInstance(); objCalendarDate1.setTime(date1); Calendar objCalendarDate2 = Calendar.getInstance(); objCalendarDate2.setTime(date2); if (objCalendarDate2.equals(objCalendarDate1)) return 0; if (objCalendarDate1.after(objCalendarDate2)) { Calendar temp = objCalendarDate1; objCalendarDate1 = objCalendarDate2; objCalendarDate2 = temp; } if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) < objCalendarDate1 .get(Calendar.DAY_OF_MONTH)) flag = 1; if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1 .get(Calendar.YEAR)) iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1 .get(Calendar.YEAR)) * 12 + objCalendarDate2.get(Calendar.MONTH) - flag) - objCalendarDate1.get(Calendar.MONTH); else iMonth = objCalendarDate2.get(Calendar.MONTH) - objCalendarDate1.get(Calendar.MONTH) - flag; } catch (Exception e) { e.printStackTrace(); } return iMonth; } @SuppressWarnings("unchecked") public static List getMonthList(String startDate,String endDate){ if(StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)) { return new ArrayList(); } List
dateList = new ArrayList (); //得到两个日期之间有多少月 int num = getMonths(ymdStr2Date(startDate),ymdStr2Date(endDate)); Calendar c = Calendar.getInstance(); c.setTime(DateUtils.ymdStr2Date(startDate)); dateList.add(formaterDate(c.getTime(), "yyyy-MM")); for(int i=0; i dateList = new ArrayList (); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String tomorrow = sdf.format(calendar.getTime()); dateList.add(tomorrow); for (int i = 0; i < 6; i++) { calendar.set(6, calendar.get(6) + 1); tomorrow = sdf.format(calendar.getTime()); dateList.add(tomorrow); } return dateList; } public static String getWeekStartDateString(String startDate) { return getWeekDateString(startDate, 0); } public static String getWeekEndDateString(String endDate) { return getWeekDateString(endDate, 6); } public static String getWeekDateString(String currentDate, int day) { // 日历 Calendar calendar = new GregorianCalendar(); // 设置日历为当前时间 calendar.setTime(ymdStr2Date(currentDate)); // 得到今天是周几 int dayofweek = calendar.get(Calendar.DAY_OF_WEEK); int weekofYear = calendar.get(Calendar.WEEK_OF_YEAR); // 加入不是周日,设置日期到下一周 if (dayofweek == 1) { calendar.set(Calendar.WEEK_OF_YEAR, weekofYear - 1); } int nextWeekDay = calendar.get(Calendar.DATE); // 设置日历为下周第一天,+2是下周从星期一开始,星期一是每周的第2天 calendar.set(Calendar.DATE, nextWeekDay - dayofweek + 2); calendar.add(Calendar.DATE, day); return ymd(calendar.getTime()); } public static Date[] getWeekStartAndEndDate(Date currentDate, int start) { // 将要返回的日期 Date[] days = new Date[2]; if(null != currentDate){ // 日历 Calendar calendar = new GregorianCalendar(); // 设置日历为当前时间 calendar.setTime(currentDate); // 得到今天是周几 int dayofweek = calendar.get(Calendar.DAY_OF_WEEK); int weekofYear = calendar.get(Calendar.WEEK_OF_YEAR); // 加入不是周日,设置日期到下一周 if (dayofweek == 1) { calendar.set(Calendar.WEEK_OF_YEAR, weekofYear - 1); } // 得到当前是全年的第几周 int nextWeekDay = calendar.get(Calendar.DATE); // 设置日历为下周第一天,+5是下周从星期四开始,星期四是每周的第5天 calendar.set(Calendar.DATE, nextWeekDay - dayofweek + 2); calendar.add(Calendar.DATE, start); days[0] = calendar.getTime(); days[0] = ymdHmsStr2Date(ymd(days[0]) + " 00:00:00"); calendar.add(Calendar.DATE, 6); days[1] = calendar.getTime(); days[1] = ymdHmsStr2Date(ymd(days[1]) + " 23:59:59"); } return days; } public static String[] getWeekStartAndEndDate(String currentDate, int start) { // 将要返回的日期 String[] days = new String[2]; if(StringUtils.isEmpty(currentDate)){ return days; } // 日历 Calendar calendar = new GregorianCalendar(); // 设置日历为当前时间 calendar.setTime(ymdStr2Date(currentDate)); // 得到今天是周几 int dayofweek = calendar.get(Calendar.DAY_OF_WEEK); int weekofYear = calendar.get(Calendar.WEEK_OF_YEAR); // 加入不是周日,设置日期到下一周 if (dayofweek == 1) { if(weekofYear == 1){ weekofYear = 53; } calendar.set(Calendar.WEEK_OF_YEAR, weekofYear - 1); } // 得到当前是全年的第几周 int nextWeekDay = calendar.get(Calendar.DATE); calendar.set(Calendar.DATE, nextWeekDay - dayofweek + 2); calendar.add(Calendar.DATE, start); days[0] = ymd(calendar.getTime()); calendar.add(Calendar.DATE, 6); days[1] = ymd(calendar.getTime()); return days; } public static String[] getThisWeekStartEndDays() { return getWeekStartAndEndDate(ymd(new Date()), 0); } public static String[] getLastWeekStartEndDays() { return getWeekStartAndEndDate(ymd(new Date()), -7); } public static String[] getNextWeekStartEndDays() { return getWeekStartAndEndDate(ymd(new Date()), 7); } @SuppressWarnings("unchecked") public static List getWeekDateList(String date) throws ParseException { List dateList = new ArrayList (); Calendar calendar = Calendar.getInstance(); SimpleDateFormat ymd = new SimpleDateFormat("yyyy-MM-dd"); Date dateVar = ymd.parse(date); calendar.setTime(dateVar); dateList.add(date); for (int i = 1; i <= 6; i++) { calendar.set(6, calendar.get(6) + 1); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String tomorrow = sdf.format(calendar.getTime()); dateList.add(tomorrow); } return dateList; } public static String getNextDay(String currentDate) { Date d = ymdStr2Date(currentDate); Calendar c = Calendar.getInstance(); c.setTime(d); c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 1); return ymd(c.getTime()); } /** * 获得开始时间和结束时间之间的时间列表 * @param startDate * @param endDate * @return List * @throws ParseException */ @SuppressWarnings("unchecked") public static List getDateList(String startDate, String endDate) throws ParseException { List dateList = new ArrayList (); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); // 设定格式 Date start = dateFormat.parse(startDate); Date end = dateFormat.parse(endDate); long day = ((end.getTime() - start.getTime()) / 1000);// 秒数 day = day / (60 * 60 * 24); // 天数 for (int i = 0; i <= day; i++) { String date = getAfterSomeDayYms(startDate, i); dateList.add(date); } return dateList; } /** * 判断所给时间在月的第几周 * @param date 输入时间 * @return 第几周 */ public static int weekOfMonth(String date) { Date d = ymdStr2Date(date); Calendar c = Calendar.getInstance(); c.setTime(d); return c.get(Calendar.WEEK_OF_MONTH); } /** * 获取当前星期几 */ public static int weekDay(String date) { Date d = ymdStr2Date(date); Calendar c = Calendar.getInstance(); c.setTime(d); c.setFirstDayOfWeek(Calendar.SUNDAY); return c.get(Calendar.DAY_OF_WEEK)-1; } /** * 返回日期date 前推beforHour小时后的 日期 * @param date * @param beforHour * @return */ public static Date getBeforHourDate(Date date, int beforHour){ if(date != null){ Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.HOUR, c.get(Calendar.HOUR)-beforHour); return c.getTime(); } return null; } /** * 取给定日期的前一天 * @param date * @return */ public static Date getLastDay(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 1); return calendar.getTime(); } /** * 返回两时间的相差天数 * @param d1 * @param d2 * @return */ public static int getDayNumBetween2Date(Date d1, Date d2){ if(isEqualsInYMD(d1, d2)){ return 0; } long l = d2.getTime()-d1.getTime(); int day = (int) (l/(24*60*60*1000)); if(day < 0){ day = (-day); } int m = (int) (l%(24*60*60*1000)); Calendar c = Calendar.getInstance(); if(d1.compareTo(d2)<=0){ c.setTime(d1); c.add(Calendar.MILLISECOND, m); if(isEqualsInYMD(d1, c.getTime())){ return day; }else{ return day+1; } }else{ c.setTime(d2); c.add(Calendar.MILLISECOND, m); if(isEqualsInYMD(d2, c.getTime())){ return day; }else{ return day+1; } } } /** * 两个时间是否是 同年 同月 同日 * 如果是,则返回true,否则返回false * @param d1 * @param d2 * @return */ public static boolean isEqualsInYMD(Date d1, Date d2){ Calendar c = Calendar.getInstance(); c.setTime(d1); int year1 = c.get(Calendar.YEAR); int dayOfYear1 = c.get(Calendar.DAY_OF_YEAR); c.setTime(d2); int year2 = c.get(Calendar.YEAR); int dayOfYear2 = c.get(Calendar.DAY_OF_YEAR); if(year1 != year2){ return false; } if(dayOfYear1 != dayOfYear2){ return false; } return true; } /** * 获得当前月的前 i 个月 * @param i (henrry) * return 月的数组 */ public static String[] getMonthArr(int i){ String arr[] = new String[i]; Calendar c = Calendar.getInstance(); int temp = 0; int tempp = 0; int year = 0; int month = 0; int m = i-1; for(int j=0;j 12){ temp = (i-1)/12; tempp = (i-1)%12; year = c.get(Calendar.YEAR)-temp; month = c.get(Calendar.MONTH)-tempp+1; if(month<10 && month >0){ arr[j] = year+"-0"+month; }else if(month<0){ month = 12+month; if(month<10){ arr[j] = (year-1)+"-0"+month; }else{ arr[j] = (year-1)+"-"+month; } }else if(month == 0){ arr[j] = (year-1)+"-"+12; }else{ arr[j] = year+"-"+month; } }else{ year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH)-i+2; if(month<10 && month >0){ arr[j] = year+"-0"+month; }else if(month<0){ month = 12+month; if(month<10){ arr[j] = (year-1)+"-0"+month; }else{ arr[j] = (year-1)+"-"+month; } }else if(month==0){ arr[j] = (year-1)+"-"+12; }else{ arr[j] = year+"-"+month; } } i--; } int monthNow = c.get(Calendar.MONTH); if(monthNow>8){ arr[m] = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH)+1); }else{ arr[m] = c.get(Calendar.YEAR) + "-0" + (c.get(Calendar.MONTH)+1); } return arr; } /** * 得到两个时间之间的差距,根据type可返回分别以天,时,分为单位的整数 * @param d1 * @param d2 * @param type * @return */ public static int getBetweenDateGap(Date d1, Date d2, String type){ long time1 = d1.getTime(); long time2 = d2.getTime(); long m = (time1-time2)/1000; int nDay = (int)m/(24*60*60); int nHour = (int)(m-nDay*24*60*60)/(60*60); int nMinute = (int)(m-nDay*24*60*60-nHour*60*60)/60; int mSecond = (int)(m-nDay*24*60*60-nHour*60*60); if("day".equals(type)){ return nDay; }else if("minute".equals(type)){ return nMinute; }else if("hour".equals(type)){ return nHour; }else if("second".equals(type)){ return mSecond; } return nMinute; } /** * * * 通过月份计算季度 * * @param * month * * @return */ public static int getQuarter(int month) { if (month < 1 || month > 12) { throw new IllegalArgumentException("month is invalid."); } return (month - 1) / 3 + 1; }}