一、枚举类型定义
1、性别:男,女,保密 (目录:com/imooc/enums/Sex.java)

package com.imooc.enums; public enum Sex { woman(0,"女"), man(1,"男"), secret(2,"保密"); public final Integer type; public final String value; Sex(Integer type,String value) { this.type = type; this.value = value; } }
2、是否 (如:是否显示)(目录:com/imooc/enums/YesOrNo.java)

package com.imooc.enums; public enum YesOrNo { NO(0,"否"), YES(1,"是"); public final Integer type; public final String value; YesOrNo(Integer type,String value) { this.type = type; this.value = value; } }
二、自定义响应数据结构 IMOOCJSONResult (目录:com/imooc/utils/IMOOCJSONResult.java)

package com.imooc.utils; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.ObjectMapper; /** * * @Title: IMOOCJSONResult.java * @Package com.imooc.utils * @Description: 自定义响应数据结构 * 本类可提供给 H5/ios/安卓/公众号/小程序 使用 * 前端接受此类数据(json object)后,可自行根据业务去实现相关功能 * * 200:表示成功 * 500:表示错误,错误信息在msg字段中 * 501:bean验证错误,不管多少个错误都以map形式返回 * 502:拦截器拦截到用户token出错 * 555:异常抛出信息 * 556: 用户qq校验异常 * @Copyright: Copyright (c) 2020 * @Company: www.imooc.com * @author 慕课网 - 风间影月 * @version V1.0 */ public class IMOOCJSONResult { // 定义jackson对象 private static final ObjectMapper MAPPER = new ObjectMapper(); // 响应业务状态 private Integer status; // 响应消息 private String msg; // 响应中的数据 private Object data; @JsonIgnore private String ok; // 不使用 public static IMOOCJSONResult build(Integer status, String msg, Object data) { return new IMOOCJSONResult(status, msg, data); } public static IMOOCJSONResult build(Integer status, String msg, Object data, String ok) { return new IMOOCJSONResult(status, msg, data, ok); } public static IMOOCJSONResult ok(Object data) { return new IMOOCJSONResult(data); } public static IMOOCJSONResult ok() { return new IMOOCJSONResult(null); } public static IMOOCJSONResult errorMsg(String msg) { return new IMOOCJSONResult(500, msg, null); } public static IMOOCJSONResult errorMap(Object data) { return new IMOOCJSONResult(501, "error", data); } public static IMOOCJSONResult errorTokenMsg(String msg) { return new IMOOCJSONResult(502, msg, null); } public static IMOOCJSONResult errorException(String msg) { return new IMOOCJSONResult(555, msg, null); } public static IMOOCJSONResult errorUserQQ(String msg) { return new IMOOCJSONResult(556, msg, null); } public IMOOCJSONResult() { } public IMOOCJSONResult(Integer status, String msg, Object data) { this.status = status; this.msg = msg; this.data = data; } public IMOOCJSONResult(Integer status, String msg, Object data, String ok) { this.status = status; this.msg = msg; this.data = data; this.ok = ok; } public IMOOCJSONResult(Object data) { this.status = 200; this.msg = "OK"; this.data = data; } public Boolean isOK() { return this.status == 200; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public String getOk() { return ok; } public void setOk(String ok) { this.ok = ok; } }
三、Json操作:对象转换成json字符串,将json结果集转化为对象,json数据转换成pojo对象list

package com.imooc.utils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.List; /** * * @Title: JsonUtils.java * @Package com.imooc.utils * @Description: json转换类 * Copyright: Copyright (c) * Company: www.imooc.com * * @author imooc */ public class JsonUtils { // 定义jackson对象 private static final ObjectMapper MAPPER = new ObjectMapper(); /** * 将对象转换成json字符串。 * @param data * @return */ public static String objectToJson(Object data) { try { String string = MAPPER.writeValueAsString(data); return string; } catch (JsonProcessingException e) { e.printStackTrace(); } return null; } /** * 将json结果集转化为对象 * * @param jsonData json数据 * @param beanType 对象中的object类型 * @return */ public static <T> T jsonToPojo(String jsonData, Class<T> beanType) { try { T t = MAPPER.readValue(jsonData, beanType); return t; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 将json数据转换成pojo对象list * @param jsonData * @param beanType * @return */ public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) { JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); try { List<T> list = MAPPER.readValue(jsonData, javaType); return list; } catch (Exception e) { e.printStackTrace(); } return null; } }
四、MD5操作

package com.imooc.utils; import org.apache.commons.codec.binary.Base64; import java.security.MessageDigest; public class MD5Utils { public static String getMD5Str(String strVal) throws Exception { MessageDigest md5 = MessageDigest.getInstance("MD5"); String newStr= Base64.encodeBase64String(md5.digest(strVal.getBytes())); return newStr; } public static void main(String[] args) { try { String md5=getMD5Str("imooc"); System.out.println(md5); }catch (Exception e) { e.printStackTrace(); } } }
五、Cookie操作

package com.imooc.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; /** * * @Title: CookieUtils.java * @Package com.imooc.utils * @Description: Cookie 工具类 * Copyright: Copyright (c) * Company: www.imooc.com * * @author imooc * @version V1.0 */ public final class CookieUtils { final static Logger logger = LoggerFactory.getLogger(CookieUtils.class); /** * * @Description: 得到Cookie的值, 不编码 * @param request * @param cookieName * @return */ public static String getCookieValue(HttpServletRequest request, String cookieName) { return getCookieValue(request, cookieName, false); } /** * * @Description: 得到Cookie的值 * @param request * @param cookieName * @param isDecoder * @return */ public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) { Cookie[] cookieList = request.getCookies(); if (cookieList == null || cookieName == null) { return null; } String retValue = null; try { for (int i = 0; i < cookieList.length; i++) { if (cookieList[i].getName().equals(cookieName)) { if (isDecoder) { retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8"); } else { retValue = cookieList[i].getValue(); } break; } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return retValue; } /** * * @Description: 得到Cookie的值 * @param request * @param cookieName * @param encodeString * @return */ public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) { Cookie[] cookieList = request.getCookies(); if (cookieList == null || cookieName == null) { return null; } String retValue = null; try { for (int i = 0; i < cookieList.length; i++) { if (cookieList[i].getName().equals(cookieName)) { retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString); break; } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return retValue; } /** * * @Description: 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码 * @param request * @param response * @param cookieName * @param cookieValue */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue) { setCookie(request, response, cookieName, cookieValue, -1); } /** * * @Description: 设置Cookie的值 在指定时间内生效,但不编码 * @param request * @param response * @param cookieName * @param cookieValue * @param cookieMaxage */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage) { setCookie(request, response, cookieName, cookieValue, cookieMaxage, false); } /** * * @Description: 设置Cookie的值 不设置生效时间,但编码 * 在服务器被创建,返回给客户端,并且保存客户端 * 如果设置了SETMAXAGE(int seconds),会把cookie保存在客户端的硬盘中 * 如果没有设置,会默认把cookie保存在浏览器的内存中 * 一旦设置setPath():只能通过设置的路径才能获取到当前的cookie信息 * @param request * @param response * @param cookieName * @param cookieValue * @param isEncode */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, boolean isEncode) { setCookie(request, response, cookieName, cookieValue, -1, isEncode); } /** * * @Description: 设置Cookie的值 在指定时间内生效, 编码参数 * @param request * @param response * @param cookieName * @param cookieValue * @param cookieMaxage * @param isEncode */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) { doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode); } /** * * @Description: 设置Cookie的值 在指定时间内生效, 编码参数(指定编码) * @param request * @param response * @param cookieName * @param cookieValue * @param cookieMaxage * @param encodeString */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, String encodeString) { doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString); } /** * * @Description: 删除Cookie带cookie域名 * @param request * @param response * @param cookieName */ public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, String cookieName) { doSetCookie(request, response, cookieName, null, -1, false); // doSetCookie(request, response, cookieName, "", -1, false); } /** * * @Description: 设置Cookie的值,并使其在指定时间内生效 * @param request * @param response * @param cookieName * @param cookieValue * @param cookieMaxage cookie生效的最大秒数 * @param isEncode */ private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) { try { if (cookieValue == null) { cookieValue = ""; } else if (isEncode) { cookieValue = URLEncoder.encode(cookieValue, "utf-8"); } Cookie cookie = new Cookie(cookieName, cookieValue); if (cookieMaxage > 0) cookie.setMaxAge(cookieMaxage); if (null != request) {// 设置域名的cookie String domainName = getDomainName(request); logger.info("========== domainName: {} ==========", domainName); if (!"localhost".equals(domainName)) { cookie.setDomain(domainName); } } cookie.setPath("/"); response.addCookie(cookie); } catch (Exception e) { e.printStackTrace(); } } /** * * @Description: 设置Cookie的值,并使其在指定时间内生效 * @param request * @param response * @param cookieName * @param cookieValue * @param cookieMaxage cookie生效的最大秒数 * @param encodeString */ private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, String encodeString) { try { if (cookieValue == null) { cookieValue = ""; } else { cookieValue = URLEncoder.encode(cookieValue, encodeString); } Cookie cookie = new Cookie(cookieName, cookieValue); if (cookieMaxage > 0) cookie.setMaxAge(cookieMaxage); if (null != request) {// 设置域名的cookie String domainName = getDomainName(request); logger.info("========== domainName: {} ==========", domainName); if (!"localhost".equals(domainName)) { cookie.setDomain(domainName); } } cookie.setPath("/"); response.addCookie(cookie); } catch (Exception e) { e.printStackTrace(); } } /** * * @Description: 得到cookie的域名 * @return */ private static final String getDomainName(HttpServletRequest request) { String domainName = null; String serverName = request.getRequestURL().toString(); if (serverName == null || serverName.equals("")) { domainName = ""; } else { serverName = serverName.toLowerCase(); serverName = serverName.substring(7); final int end = serverName.indexOf("/"); serverName = serverName.substring(0, end); if (serverName.indexOf(":") > 0) { String[] ary = serverName.split("\:"); serverName = ary[0]; } final String[] domains = serverName.split("\."); int len = domains.length; if (len > 3 && !isIp(serverName)) { // www.xxx.com.cn domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1]; } else if (len <= 3 && len > 1) { // xxx.com or xxx.cn domainName = "." + domains[len - 2] + "." + domains[len - 1]; } else { domainName = serverName; } } return domainName; } public static String trimSpaces(String IP){//去掉IP字符串前后所有的空格 while(IP.startsWith(" ")){ IP= IP.substring(1,IP.length()).trim(); } while(IP.endsWith(" ")){ IP= IP.substring(0,IP.length()-1).trim(); } return IP; } public static boolean isIp(String IP){//判断是否是一个IP boolean b = false; IP = trimSpaces(IP); if(IP.matches("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")){ String s[] = IP.split("\."); if(Integer.parseInt(s[0])<255) if(Integer.parseInt(s[1])<255) if(Integer.parseInt(s[2])<255) if(Integer.parseInt(s[3])<255) b = true; } return b; } }
六、时间日期操作

package com.imooc.utils; import java.text.*; import java.util.*; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; public class DateUtil { /** * Base ISO 8601 Date format yyyyMMdd i.e., 20021225 for the 25th day of December in the year 2002 */ public static final String ISO_DATE_FORMAT = "yyyyMMdd"; /** * Expanded ISO 8601 Date format yyyy-MM-dd i.e., 2002-12-25 for the 25th day of December in the year 2002 */ public static final String ISO_EXPANDED_DATE_FORMAT = "yyyy-MM-dd"; /** * yyyy-MM-dd hh:mm:ss */ public static String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; public static String DATE_PATTERN = "yyyyMMddHHmmss"; /** * 则个 */ private static boolean LENIENT_DATE = false; private static Random random = new Random(); private static final int ID_BYTES = 10; public synchronized static String generateId() { StringBuffer result = new StringBuffer(); result = result.append(System.currentTimeMillis()); for (int i = 0; i < ID_BYTES; i++) { result = result.append(random.nextInt(10)); } return result.toString(); } protected static final float normalizedJulian(float JD) { float f = Math.round(JD + 0.5f) - 0.5f; return f; } /** * Returns the Date from a julian. The Julian date will be converted to noon GMT, * such that it matches the nearest half-integer (i.e., a julian date of 1.4 gets * changed to 1.5, and 0.9 gets changed to 0.5.) * * @param JD the Julian date * @return the Gregorian date */ public static final Date toDate(float JD) { /* To convert a Julian Day Number to a Gregorian date, assume that it is for 0 hours, Greenwich time (so * that it ends in 0.5). Do the following calculations, again dropping the fractional part of all * multiplicatons and divisions. Note: This method will not give dates accurately on the * Gregorian Proleptic Calendar, i.e., the calendar you get by extending the Gregorian * calendar backwards to years earlier than 1582. using the Gregorian leap year * rules. In particular, the method fails if Y<400. */ float Z = (normalizedJulian(JD)) + 0.5f; float W = (int) ((Z - 1867216.25f) / 36524.25f); float X = (int) (W / 4f); float A = Z + 1 + W - X; float B = A + 1524; float C = (int) ((B - 122.1) / 365.25); float D = (int) (365.25f * C); float E = (int) ((B - D) / 30.6001); float F = (int) (30.6001f * E); int day = (int) (B - D - F); int month = (int) (E - 1); if (month > 12) { month = month - 12; } int year = (int) (C - 4715); //(if Month is January or February) or C-4716 (otherwise) if (month > 2) { year--; } Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); // damn 0 offsets c.set(Calendar.DATE, day); return c.getTime(); } /** * Returns the days between two dates. Positive values indicate that * the second date is after the first, and negative values indicate, well, * the opposite. Relying on specific times is problematic. * * @param early the "first date" * @param late the "second date" * @return the days between the two dates */ public static final int daysBetween(Date early, Date late) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(early); c2.setTime(late); return daysBetween(c1, c2); } /** * Returns the days between two dates. Positive values indicate that * the second date is after the first, and negative values indicate, well, * the opposite. * * @param early * @param late * @return the days between two dates. */ public static final int daysBetween(Calendar early, Calendar late) { return (int) (toJulian(late) - toJulian(early)); } /** * Return a Julian date based on the input parameter. This is * based from calculations found at * <a href="http://quasar.as.utexas.edu/BillInfo/JulianDatesG.html">Julian Day Calculations * (Gregorian Calendar)</a>, provided by Bill Jeffrys. * @param c a calendar instance * @return the julian day number */ public static final float toJulian(Calendar c) { int Y = c.get(Calendar.YEAR); int M = c.get(Calendar.MONTH); int D = c.get(Calendar.DATE); int A = Y / 100; int B = A / 4; int C = 2 - A + B; float E = (int) (365.25f * (Y + 4716)); float F = (int) (30.6001f * (M + 1)); float JD = C + D + E + F - 1524.5f; return JD; } /** * Return a Julian date based on the input parameter. This is * based from calculations found at * <a href="http://quasar.as.utexas.edu/BillInfo/JulianDatesG.html">Julian Day Calculations * (Gregorian Calendar)</a>, provided by Bill Jeffrys. * @param date * @return the julian day number */ public static final float toJulian(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return toJulian(c); } /** * @param isoString * @param fmt * @param field Calendar.YEAR/Calendar.MONTH/Calendar.DATE * @param amount * @return * @throws ParseException */ public static final String dateIncrease(String isoString, String fmt, int field, int amount) { try { Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone( "GMT")); cal.setTime(stringToDate(isoString, fmt, true)); cal.add(field, amount); return dateToString(cal.getTime(), fmt); } catch (Exception ex) { return null; } } /** * Time Field Rolling function. * Rolls (up/down) a single unit of time on the given time field. * * @param isoString * @param field the time field. * @param up Indicates if rolling up or rolling down the field value. * @param expanded use formating char's * @exception ParseException if an unknown field value is given. */ public static final String roll(String isoString, String fmt, int field, boolean up) throws ParseException { Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone( "GMT")); cal.setTime(stringToDate(isoString, fmt)); cal.roll(field, up); return dateToString(cal.getTime(), fmt); } /** * Time Field Rolling function. * Rolls (up/down) a single unit of time on the given time field. * * @param isoString * @param field the time field. * @param up Indicates if rolling up or rolling down the field value. * @exception ParseException if an unknown field value is given. */ public static final String roll(String isoString, int field, boolean up) throws ParseException { return roll(isoString, DATETIME_PATTERN, field, up); } /** * java.util.Date * @param dateText * @param format * @param lenient * @return */ public static Date stringToDate(String dateText, String format, boolean lenient) { if (dateText == null) { return null; } DateFormat df = null; try { if (format == null) { df = new SimpleDateFormat(); } else { df = new SimpleDateFormat(format); } // setLenient avoids allowing dates like 9/32/2001 // which would otherwise parse to 10/2/2001 df.setLenient(false); return df.parse(dateText); } catch (ParseException e) { return null; } } /** * @return Timestamp */ public static java.sql.Timestamp getCurrentTimestamp() { return new java.sql.Timestamp(new Date().getTime()); } /** java.util.Date * @param dateText * @param format * @return */ public static Date stringToDate(String dateString, String format) { return stringToDate(dateString, format, LENIENT_DATE); } /** * java.util.Date * @param dateText */ public static Date stringToDate(String dateString) { return stringToDate(dateString, ISO_EXPANDED_DATE_FORMAT, LENIENT_DATE); } /** * @return * @param pattern * @param date */ public static String dateToString(Date date, String pattern) { if (date == null) { return null; } try { SimpleDateFormat sfDate = new SimpleDateFormat(pattern); sfDate.setLenient(false); return sfDate.format(date); } catch (Exception e) { return null; } } /** * yyyy-MM-dd * @param date * @return */ public static String dateToString(Date date) { return dateToString(date, ISO_EXPANDED_DATE_FORMAT); } /** * @return */ public static Date getCurrentDateTime() { Calendar calNow = Calendar.getInstance(); Date dtNow = calNow.getTime(); return dtNow; } /** * * @param pattern * @return */ public static String getCurrentDateString(String pattern) { return dateToString(getCurrentDateTime(), pattern); } /** * yyyy-MM-dd * @return */ public static String getCurrentDateString() { return dateToString(getCurrentDateTime(), ISO_EXPANDED_DATE_FORMAT); } /** * 返回固定格式的当前时间 * yyyy-MM-dd hh:mm:ss * @param date * @return */ public static String dateToStringWithTime( ) { return dateToString(new Date(), DATETIME_PATTERN); } /** * yyyy-MM-dd hh:mm:ss * @param date * @return */ public static String dateToStringWithTime(Date date) { return dateToString(date, DATETIME_PATTERN); } /** * * @param date * @param days * @return java.util.Date */ public static Date dateIncreaseByDay(Date date, int days) { Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone( "GMT")); cal.setTime(date); cal.add(Calendar.DATE, days); return cal.getTime(); } /** * * @param date * @param days * @return java.util.Date */ public static Date dateIncreaseByMonth(Date date, int mnt) { Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone( "GMT")); cal.setTime(date); cal.add(Calendar.MONTH, mnt); return cal.getTime(); } /** * * @param date * @param mnt * @return java.util.Date */ public static Date dateIncreaseByYear(Date date, int mnt) { Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone( "GMT")); cal.setTime(date); cal.add(Calendar.YEAR, mnt); return cal.getTime(); } /** * * @param date yyyy-MM-dd * @param days * @return yyyy-MM-dd */ public static String dateIncreaseByDay(String date, int days) { return dateIncreaseByDay(date, ISO_DATE_FORMAT, days); } /** * @param date * @param fmt * @param days * @return */ public static String dateIncreaseByDay(String date, String fmt, int days) { return dateIncrease(date, fmt, Calendar.DATE, days); } /** * * @param src * @param srcfmt * @param desfmt * @return */ public static String stringToString(String src, String srcfmt, String desfmt) { return dateToString(stringToDate(src, srcfmt), desfmt); } /** * * @param date * @return string */ public static String getYear(Date date) { SimpleDateFormat formater = new SimpleDateFormat( "yyyy"); String cur_year = formater.format(date); return cur_year; } /** * * @param date * @return string */ public static String getMonth(Date date) { SimpleDateFormat formater = new SimpleDateFormat( "MM"); String cur_month = formater.format(date); return cur_month; } /** * @param date * @return string */ public static String getDay(Date date) { SimpleDateFormat formater = new SimpleDateFormat( "dd"); String cur_day = formater.format(date); return cur_day; } public static int getDayInt(Date date) { SimpleDateFormat formater = new SimpleDateFormat( "dd"); String cur_day = formater.format(date); return Integer.valueOf(cur_day); } /** * @param date * @return string */ public static String getHour(Date date) { SimpleDateFormat formater = new SimpleDateFormat( "HH"); String cur_day = formater.format(date); return cur_day; } public static int getMinsFromDate(Date dt) { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(dt); int hour = cal.get(Calendar.HOUR_OF_DAY); int min = cal.get(Calendar.MINUTE); return ((hour * 60) + min); } /** * Function to convert String to Date Object. If invalid input then current or next day date * is returned (Added by Ali Naqvi on 2006-5-16). * @param str String input in YYYY-MM-DD HH:MM[:SS] format. * @param isExpiry boolean if set and input string is invalid then next day date is returned * @return Date */ public static Date convertToDate(String str, boolean isExpiry) { SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date dt = null; try { dt = fmt.parse(str); } catch (ParseException ex) { Calendar cal = Calendar.getInstance(); if (isExpiry) { cal.add(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); } else { cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); } dt = cal.getTime(); } return dt; } public static Date convertToDate(String str) { SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm"); Date dt = null; try { dt = fmt.parse(str); } catch (ParseException ex) { dt = new Date(); } return dt; } public static String dateFromat(Date date, int minute) { String dateFormat = null; int year = Integer.parseInt(getYear(date)); int month = Integer.parseInt(getMonth(date)); int day = Integer.parseInt(getDay(date)); int hour = minute / 60; int min = minute % 60; dateFormat = String.valueOf(year) + (month > 9 ? String.valueOf(month) : "0" + String.valueOf(month)) + (day > 9 ? String.valueOf(day) : "0" + String.valueOf(day)) + " " + (hour > 9 ? String.valueOf(hour) : "0" + String.valueOf(hour)) + (min > 9 ? String.valueOf(min) : "0" + String.valueOf(min)) + "00"; return dateFormat; } public static String sDateFormat() { return new SimpleDateFormat(DATE_PATTERN).format(Calendar.getInstance().getTime()); } /** * * @Description: 获得本月的第一天日期 * @return * * @author leechenxiang * @date 2017年5月31日 下午1:37:34 */ public static String getFirstDateOfThisMonth() { SimpleDateFormat format = new SimpleDateFormat(ISO_EXPANDED_DATE_FORMAT); Calendar calendarFirst = Calendar.getInstance(); calendarFirst = Calendar.getInstance(); calendarFirst.add(Calendar.MONTH, 0); calendarFirst.set(Calendar.DAY_OF_MONTH, 1); String firstDate = format.format(calendarFirst.getTime()); return firstDate; } /** * * @Description: 获得本月的最后一天日期 * @return * * @author leechenxiang * @date 2017年5月31日 下午1:37:50 */ public static String getLastDateOfThisMonth() { SimpleDateFormat format = new SimpleDateFormat(ISO_EXPANDED_DATE_FORMAT); Calendar calendarLast = Calendar.getInstance(); calendarLast.setTime(new Date()); calendarLast.getActualMaximum(Calendar.DAY_OF_MONTH); String lastDate = format.format(calendarLast.getTime()); return lastDate; } /** * @Description: 判断字符串日期是否匹配指定的格式化日期 */ public static boolean isValidDate(String strDate, String formatter) { SimpleDateFormat sdf = null; ParsePosition pos = new ParsePosition(0); if (StringUtils.isBlank(strDate) || StringUtils.isBlank(formatter)) { return false; } try { sdf = new SimpleDateFormat(formatter); sdf.setLenient(false); Date date = sdf.parse(strDate, pos); if (date == null) { return false; } else { if (pos.getIndex() > sdf.format(date).length()) { return false; } return true; } } catch (Exception e) { e.printStackTrace(); return false; } } public static void main(String[] args) { // String timeDir=DateUtil.dateToString(new Date(),DateUtil.ISO_EXPANDED_DATE_FORMAT); // System.out.println(timeDir); boolean flag = DateUtil.isValidDate("1990-10-32", DateUtil.ISO_EXPANDED_DATE_FORMAT); System.out.println(flag); } }