package cn.timer.api.controller.kqgl; import java.text.DateFormat; import java.text.Format; import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Set; import org.apache.commons.lang3.ArrayUtils; /** * @author lal 2020-05-11 * */ public class ClockInTool { static SimpleDateFormat famt = new SimpleDateFormat("yyyy-MM-dd"); public static void main(String[] args) { System.out.println(isLegalDate("2020-9-12")); System.out.println(isLegalDate("2020-09-12")); } public static boolean isLegalDate(String sDate) { int legalLen = 10; if ((sDate == null) || (sDate.length() != legalLen)) { return false; } DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = formatter.parse(sDate); return sDate.equals(formatter.format(date)); } catch (Exception e) { return false; } } public static String[] shuzuqucong(String[] temp) { List<String> list = new LinkedList<String>(); for(int i = 0; i < temp.length; i++) { if(!list.contains(temp[i])) { list.add(temp[i]); } } String[] rowsTemp = list.toArray(new String[list.size()]); if(rowsTemp!=null && rowsTemp.length > 0) { for(int i=0; i<rowsTemp.length; i++) { System.out.println(rowsTemp[i]); } } return rowsTemp; } public static boolean useArrayUtils(String[] arr, String targetValue) { return ArrayUtils.contains(arr,targetValue); } // 获得上个月月份年份 public static String getLastYearMonth() { // Calendar now = Calendar.getInstance(); // int month = now.get(Calendar.MONTH); // String m; // if (month < 10) { // m = "0" + month; // } else { // m = month + ""; // } // return now.get(Calendar.YEAR) + "-" + m; LocalDate today = LocalDate.now(); today = today.minusMonths(1); DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM"); return formatters.format(today); } /** * 将传入的日期的年月得到一个值 * @param date 日期 * @return 获取一个唯一的年月数值 */ public static int getYearMonth(Date date){ //传入日期 Calendar calder = Calendar.getInstance(); calder.setTime(date);//设置时间 int year = calder.get(Calendar.YEAR);//获取年份 int month=calder.get(Calendar.MONTH);//获取月份 //返回年份乘以100加上月份的值,因为月份最多2位数, // 所以年份乘以100可以获取一个唯一的年月数值 return year*100+month; } public static double round(double value){ return Math.round(value*100)/100.0; } /** * 判断某个字符串是否存在于数组中 * @param stringArray 原数组 * @param source 查找的字符串 * @return 是否找到 */ public static boolean contains(String[] stringArray, String source) { // 转换为list List<String> tempList = Arrays.asList(stringArray); // 利用list的包含方法,进行判断 if(tempList.contains(source)) { return true; } else { return false; } } /** * @param ss * @return 去除重复 */ public static String[] duplicate_removal(String[] ss) { List<String> list =new ArrayList<String>(); for(String s:ss){ if(!list.contains(s)) //或者list.indexOf(s)!=-1 list.add(s); } return list.toArray(new String[list.size()]); } /** * 将String时间转换为时间戳 * * @param time * @return * @throws ParseException */ public static long getStringTime(String time, String format) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); Date date = simpleDateFormat.parse(time); return date.getTime(); } /** * 根据时间戳获取23点 * * @return */ public static Date getnowEndTime(int day, long time) { Calendar todayEnd = Calendar.getInstance(); todayEnd.setTimeInMillis(time); todayEnd.set(Calendar.HOUR_OF_DAY, day); todayEnd.set(Calendar.MINUTE, 59); todayEnd.set(Calendar.SECOND, 59); todayEnd.set(Calendar.MILLISECOND, 999); return todayEnd.getTime(); } /** * 根据时间戳获取0点 * * @return */ public static Date getStartTime(int day, long time) { Calendar todayStart = Calendar.getInstance(); todayStart.setTimeInMillis(time); todayStart.set(Calendar.HOUR_OF_DAY, day); todayStart.set(Calendar.MINUTE, 0); todayStart.set(Calendar.SECOND, 0); todayStart.set(Calendar.MILLISECOND, 0); return todayStart.getTime(); } // 根据传入的日期获取所在月份所有日期 public static List<String> getAllDaysMonthByDate(Date d){ List<String> lst = new ArrayList<String>(); Date date = getMonthStart(d); Date monthEnd = getMonthEnd(d); while (!date.after(monthEnd)) { lst.add(famt.format(date)); date = getNext(date); } return lst; } private static Date getMonthStart(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int index = calendar.get(Calendar.DAY_OF_MONTH); calendar.add(Calendar.DATE, (1 - index)); return calendar.getTime(); } private static Date getMonthEnd(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, 1); int index = calendar.get(Calendar.DAY_OF_MONTH); calendar.add(Calendar.DATE, (-index)); return calendar.getTime(); } private static Date getNext(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, 1); return calendar.getTime(); } // 将字符串转化为日期 public static Date paraseStringToDate(String timestr){ Date date = null; Format f = new SimpleDateFormat("yyyy-MM-dd"); try { date = (Date) f.parseObject(timestr); } catch (ParseException e) { e.printStackTrace(); } return date; } // 将字符串转化为日期 public static Date paraseStringToDate(String timestr,String format){ Date date = null; Format f = new SimpleDateFormat(format); try { date = (Date) f.parseObject(timestr); } catch (ParseException e) { e.printStackTrace(); } return date; } /*** * 去除String数组中的空值 */ public static String[] deleteArrayNull(String string[]) { String strArr[] = string; // step1: 定义一个list列表,并循环赋值 ArrayList<String> strList = new ArrayList<String>(); for (int i = 0; i < strArr.length; i++) { strList.add(strArr[i]); } // step2: 删除list列表中所有的空值 while (strList.remove(null)); while (strList.remove("")); // step3: 把list列表转换给一个新定义的中间数组,并赋值给它 String strArrLast[] = strList.toArray(new String[strList.size()]); return strArrLast; } /*** * 去除String数组中的空值 */ public static String[] deleteArrayNull2(String string[]) { String strArr[] = string; // step1: 定义一个list列表,并循环赋值 ArrayList<String> strList = new ArrayList<String>(); for (int i = 0; i < strArr.length; i++) { strList.add(strArr[i]); } // step2: 删除list列表中所有的空值 while (strList.remove(null)); // while (strList.remove("")); // step3: 把list列表转换给一个新定义的中间数组,并赋值给它 String strArrLast[] = strList.toArray(new String[strList.size()]); return strArrLast; } public static Date strToDateLong(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } /** * @param timeStr 修改的时间 * @param num 修改数字 * @param numtime * @return 1:增加一年、2:增加一天、3:减10天、4:增加一个月 */ public static String requires_extra_times(String timeStr, int num,int numtime,int daft) { DateFormat df; if(daft == 1) { df = new SimpleDateFormat("yyyy-MM-dd"); }else { df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } Date date = null; try { date = df.parse(timeStr); } catch (ParseException e) { e.printStackTrace(); } Calendar cal = Calendar.getInstance(); cal.setTime(date);// 设置起时间 if(numtime == 1) { cal.add(Calendar.YEAR, num);// 增加一年 }else if(numtime == 2) { cal.add(Calendar.DATE, num);//增加一天 }else if(numtime == 3) { cal.add(Calendar.DATE, num);//减10天 }else if(numtime == 4){ cal.add(Calendar.MONTH, num);//增加一个月 }else if(numtime == 5) { cal.add(Calendar.HOUR, num); } return df.format(cal.getTime()); } /** * @param timeStr * @param addnumber * @return 通过java Calendar 实现时间+ 分钟 */ public static String addtime(String timeStr, String addnumber) { String str = null; try { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = df.parse(timeStr); // 时间累计 Calendar gc = new GregorianCalendar(); gc.setTime(date); gc.add(GregorianCalendar.MINUTE, Integer.parseInt(addnumber)); str = df.format(gc.getTime()); } catch (NumberFormatException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } return str; } /** * 获取指定年月的第一天 * * @param year * @param month * @return */ public static String getFirstDayOfMonth1(int year, int month) { Calendar cal = Calendar.getInstance(); // 设置年份 cal.set(Calendar.YEAR, year); // 设置月份 cal.set(Calendar.MONTH, month - 1); // 获取某月最小天数 int firstDay = cal.getMinimum(Calendar.DATE); // 设置日历中月份的最小天数 cal.set(Calendar.DAY_OF_MONTH, firstDay); // 格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(cal.getTime()); } /** * 获取指定年月的最后一天 * * @param year * @param month * @return */ public static String getLastDayOfMonth1(int year, int month) { Calendar cal = Calendar.getInstance(); // 设置年份 cal.set(Calendar.YEAR, year); // 设置月份 cal.set(Calendar.MONTH, month - 1); // 获取某月最大天数 int lastDay = cal.getActualMaximum(Calendar.DATE); // 设置日历中月份的最大天数 cal.set(Calendar.DAY_OF_MONTH, lastDay); // 格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(cal.getTime()); } // 数组容量的扩容,当空间(.length)不够的时候,增加一 public static String[] arrycopy(String[] ss) { // TODO Auto-generated method stub String[] ii = new String[ss.length + 1]; System.arraycopy(ss, 0, ii, 0, ss.length); return ii; } public static String[] replaceNull(String[] str) { // 用StringBuffer来存放数组中的非空元素,用“;”分隔 StringBuffer sb = new StringBuffer(); for (int i = 0; i < str.length; i++) { if ("null".equals(str[i])) { continue; } sb.append(str[i]); if (i != str.length - 1) { sb.append(";"); } } // 用String的split方法分割,得到数组 str = sb.toString().split(";"); return str; } /** * 删除数组中的指定值 或者数组中的元素包含指定值 * * @param filters 数组 * @param target 指定值 * @return */ public static String[] doChinFilters(String[] filters, String target) { target = ClockInTool.Str_Time_formatting(target,"yyyy-MM-dd"); String[] res = null; if (filters.length > 0) { List<String> tempList = Arrays.asList(filters); // Arrays.asList(filters) 迭代器实现类 不支持remove() 删除,多一步转化 List<String> arrList = new ArrayList<String>(tempList); Iterator<String> it = arrList.iterator(); while (it.hasNext()) { String x = it.next(); if(x != null) { if (x.indexOf(target) != -1) { it.remove(); } } } res = new String[arrList.size()]; arrList.toArray(res); } return res; } /** * 获取两个日期之间的所有日期 */ public static List<String> getDays(String startTime, String endTime) { // 返回的日期集合 List<String> days = new ArrayList<String>(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date start = dateFormat.parse(startTime); Date end = dateFormat.parse(endTime); Calendar tempStart = Calendar.getInstance(); tempStart.setTime(start); Calendar tempEnd = Calendar.getInstance(); tempEnd.setTime(end); tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束) while (tempStart.before(tempEnd)) { days.add(dateFormat.format(tempStart.getTime())); tempStart.add(Calendar.DAY_OF_YEAR, 1); } } catch (ParseException e) { e.printStackTrace(); } return days; } /** * 拼接字符串 */ public static String listToString(List<String> list) { if (list == null) { return null; } StringBuilder result = new StringBuilder(); boolean first = true; // 第一个前面不拼接"," for (String string : list) { if (first) { first = false; } else { result.append(","); } result.append(string); } return result.toString(); } /** * 使用java正则表达式去掉多余的.与0 * * @param s * @return string */ public static String replace(String s) { if (null != s && s.indexOf(".") > 0) { s = s.replaceAll("0+?$", "");// 去掉多余的0 s = s.replaceAll("[.]$", "");// 如最后一位是.则去掉 } return s; } /** * 根据 年、月 获取对应的月份 的 天数 */ public static int getDaysByYearMonth(int year, int month) { Calendar a = Calendar.getInstance(); a.set(Calendar.YEAR, year); a.set(Calendar.MONTH, month - 1); a.set(Calendar.DATE, 1); a.roll(Calendar.DATE, -1); int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 获取月份起始日期 * * @param date * @return * @throws ParseException */ public static String getMinMonthDate(String date) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.setTime(famt.parse(date)); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); return famt.format(calendar.getTime()); } /** * 获取月份最后日期 * * @param date * @return * @throws ParseException */ public static String getMaxMonthDate(String date) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.setTime(famt.parse(date)); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return famt.format(calendar.getTime()); } /** * 对比两个字符串数组 * * @param t1 * @param t2 * @return */ public static <T> List<T> compare(T[] t1, T[] t2) { List<T> list1 = Arrays.asList(t1); // 将t1数组转成list数组 List<T> list2 = new ArrayList<T>();// 用来存放2个数组中不相同的元素 for (T t : t2) { if (!list1.contains(t)) { list2.add(t); } } return list2; } public static String[] array_unique(String[] ss) { Set<String> set = new HashSet<String>(Arrays.asList(ss)); return set.toArray(new String[set.size()]); // 或者return new HashSet<String>(Arrays.asList(ss)).toArray(new String[0]); } public static byte[] CreateBSCommBufferFromString(String sCmdParam, byte[] bytCmd) { try { if (sCmdParam.length() == 0) { return bytCmd; } byte[] bytText = sCmdParam.getBytes("UTF-8"); byte[] bytTextLen = int2byte(bytText.length + 1); bytCmd = new byte[4 + bytText.length + 1]; System.arraycopy(bytTextLen, 0, bytCmd, 0, bytTextLen.length); System.arraycopy(bytText, 0, bytCmd, 4, bytText.length); bytCmd[4 + bytText.length] = 0; return bytCmd; } catch (Exception e) { e.printStackTrace(); bytCmd = new byte[0]; return bytCmd; } } public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xff); targets[1] = (byte) ((res >> 8) & 0xff); targets[2] = (byte) ((res >> 16) & 0xff); targets[3] = (byte) (res >>> 24); return targets; } public static byte[] ConcateByteArray(byte[] abytDest, byte[] abytSrc) { int len_dest = abytDest.length + abytSrc.length; if (abytSrc.length == 0) return abytDest; byte[] bytTmp = new byte[len_dest]; System.arraycopy(abytDest, 0, bytTmp, 0, abytDest.length); System.arraycopy(abytSrc, 0, bytTmp, abytDest.length, abytSrc.length); return bytTmp; } public static String dateToWeek2(String datetime) { SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; // String[] weekDays = {"7", "1", "2", "3", "4", "5", "6"}; Calendar cal = Calendar.getInstance(); Date date; try { date = f.parse(datetime); cal.setTime(date); } catch (ParseException e) { e.printStackTrace(); } // 一周的第几天 int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; } /** * * @param nowDate 要比较的时间 * @param startDate 开始时间 * @param endDate 结束时间 * @return true在时间段内,false不在时间段内 * @throws Exception */ public static boolean hourMinuteBetween(String nowDate, String startDate, String endDate, String date_format) { SimpleDateFormat format = new SimpleDateFormat(date_format); Date now = null; Date start = null; Date end = null; try { now = format.parse(nowDate); start = format.parse(startDate); end = format.parse(endDate); } catch (ParseException e) { e.printStackTrace(); } long nowTime = now.getTime(); long startTime = start.getTime(); long endTime = end.getTime(); return nowTime >= startTime && nowTime <= endTime; } /** * 根据日期获取 星期 (2019-05-06 ——> 星期一) * * @param datetime * @return */ public static String dateToWeek(String datetime) { SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); // String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; String[] weekDays = { "7", "1", "2", "3", "4", "5", "6" }; Calendar cal = Calendar.getInstance(); Date date; try { date = f.parse(datetime); cal.setTime(date); } catch (ParseException e) { e.printStackTrace(); } // 一周的第几天 int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; } /** * 2019-10-24T00:30:23.000Z 转化时间 */ public static String dealDateFormat(String oldDateStr, int num) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); // yyyy-MM-dd'T'HH:mm:ss.SSSZ Date date = null; try { date = df.parse(oldDateStr); } catch (ParseException e) { e.printStackTrace(); } SimpleDateFormat df1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK); Date date1 = null; try { date1 = df1.parse(date.toString()); } catch (ParseException e) { e.printStackTrace(); } DateFormat df2 = null; if (num == 1) { df2 = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss"); } else if (num == 2) { df2 = new SimpleDateFormat("HH:mm"); } else if (num == 3) { df2 = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm"); } return df2.format(date1); } /** * 时间转换时间戳 */ public static String dateToStamp(String s) { String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = simpleDateFormat.parse(s); } catch (ParseException e) { e.printStackTrace(); } long ts = date.getTime(); res = String.valueOf(ts); return res; } /** * 时间戳转换时间 */ public static String stampToDate(String s){ String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long lt = new Long(s); Date date = new Date(lt); res = simpleDateFormat.format(date); return res; } /** * 时间戳转换时间 */ public static String stampToDate2(String s){ String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); long lt = new Long(s); Date date = new Date(lt); res = simpleDateFormat.format(date); return res; } /** * 时间戳转换时间 */ public static String stampToDate3(String s){ String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); long lt = new Long(s); Date date = new Date(lt); res = simpleDateFormat.format(date); return res; } /** * 时间戳转换时间 */ public static String stampToDate4(String s){ String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); long lt = new Long(s); Date date = new Date(lt); res = simpleDateFormat.format(date); return res; } /** * 时间戳转换时间 */ public static String stampToDate5(String s){ String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm"); long lt = new Long(s); Date date = new Date(lt); res = simpleDateFormat.format(date); return res; } public static String Str_Time_formatting(String str,String Format) { SimpleDateFormat sdf = new SimpleDateFormat(Format); // String str = "2020-06-30 12:30:35"; // 把带时分秒的 date 转为 yyyy-MM-dd 格式的字符串 Date date2 = null; try { date2 = sdf.parse(str); // 把上面的字符串解析为日期类型 // System.out.println(sdf.format(date2)); } catch (ParseException e) { e.printStackTrace(); } return sdf.format(date2); } /** * Sun Nov 01 00:00:00 CST 2020 */ public static String SunNovCST(String s){ String cst; Date date = new Date(s); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); cst = simpleDateFormat.format(date); return cst; } /** * Sun Nov 01 00:00:00 CST 2020 */ public static String SunNovCSTYM(Date date2){ String cst; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); cst = simpleDateFormat.format(date2); return cst; } /** * Sun Nov 01 00:00:00 CST 2020 */ public static String SunNovCSTYMD(Date date2){ String cst; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); cst = simpleDateFormat.format(date2); return cst; } /** * Sun Nov 01 00:00:00 CST 2020 */ public static String SunNovCSTY(Date date2){ String cst; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy"); cst = simpleDateFormat.format(date2); return cst; } }