package com.changfa.utils; 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; /** * 时间格式转换工具类 */ public class TimeUtil { private static final String timeFormat = "yyyy-MM-dd HH:mm:ss"; private static final String dateFormat = "yyyy-MM-dd"; static String[] units = { "", "十", "百", "千", "万", "十万", "百万", "千万", "亿", "十亿", "百亿", "千亿", "万亿" }; static char[] numArray = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' }; /** * 时间日期格式 * * @param time * @return * @throws ParseException */ public static Date getTime(String time) throws ParseException { SimpleDateFormat ft = new SimpleDateFormat(timeFormat); return ft.parse(time); } /** * 时间日期格式 * * @param time * @return */ public static String getTime(Date time) { SimpleDateFormat ft = new SimpleDateFormat(timeFormat); return ft.format(time); } /** * 日期格式 * * @param date * @return * @throws ParseException */ public static Date getDate(String date) throws ParseException { SimpleDateFormat ft = new SimpleDateFormat(dateFormat); return ft.parse(date); } /** * 日期格式 * * @param date * @return * @throws ParseException */ public static String getDateStr(String date) throws ParseException { SimpleDateFormat ft = new SimpleDateFormat(dateFormat); return ft.format(ft.parse(date)); } public static List<String> GetCurrentWeekAllDate(){ // 获取当天的毫秒时间 long currentTimeMillis = System.currentTimeMillis(); List<String> list = getAllWeekDayDateByMillis(currentTimeMillis); return list; } private static List<String> getAllWeekDayDateByMillis(long timeMills){ List<String> list = new ArrayList<String>(); // 得到指定时间是周几 String week = getWhatDaySomeday(timeMills); // 记录与周一的间隔天数 int dayFromMonday=getHowManyDayFromMonday(week); // 获取这周第一天毫秒值 long dayMillis = 24*60*60*1000; // 获取这周第一天的日子 long firstOfWeekMillis = timeMills - dayFromMonday * dayMillis; // 使用 for 循环得到当前一周的日子(7天的日子) for(long i = firstOfWeekMillis;i<firstOfWeekMillis+ 7 *dayMillis;i+=dayMillis) { Date targetDate = new Date(i); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String targetDay = format.format(targetDate); list.add(targetDay); } return list; } private static String getWhatDaySomeday(long timeMillis) { Date toDayDate = new Date(timeMillis); SimpleDateFormat formatE = new SimpleDateFormat("E"); String week =null; try { week = formatE.format(toDayDate); System.out.println(week); } catch (Exception e) { e.printStackTrace(); } return week; } private static int getHowManyDayFromMonday(String someDay) { int day = 0; switch(someDay) { case "星期一": day=0; break; case "星期二": day=1; break; case "星期三": day=2; break; case "星期四": day=3; break; case "星期五": day=4; break; case "星期六": day=5; break; case "星期日": day=6; break; default: System.out.println("不存在这样的星期几 : "+ someDay); break; } return day; } /** * 日期格式 * * @param date * @return */ public static String getDate(Date date) { SimpleDateFormat ft = new SimpleDateFormat(dateFormat); return ft.format(date); } /** * 将日期转化成毫秒 * * @param date * @return */ public static Long getTimeMill(Date date) { return date.getTime(); } /** * 将毫秒转化为日期 * * @param time * @return */ public static Date getTimeMill(Long time) { Date date = new Date(); date.setTime(time); return date; } /** * 两个时间相差的分钟数 * * @param time1 * @param time2 * @return * @Description: */ public static Integer getDistanceMinutes(Date time1, Date time2) { try { SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); String fromDate = simpleFormat.format(time1); String toDate = simpleFormat.format(time2); long from = simpleFormat.parse(fromDate).getTime(); long to = simpleFormat.parse(toDate).getTime(); int minutes = (int) ((to - from) / (1000 * 60)); return minutes; } catch (ParseException e) { e.printStackTrace(); return 0; } } public static String getDay(Date date){ String week = ""; Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int weekday = calendar.get(Calendar.DAY_OF_WEEK); if (weekday == 1) { week = "星期日"; } else if (weekday == 2) { week = "星期一"; } else if (weekday == 3) { week = "星期二"; } else if (weekday == 4) { week = "星期三"; } else if (weekday == 5) { week = "星期四"; } else if (weekday == 6) { week = "星期五"; } else if (weekday == 7) { week = "星期六"; } return week; } /** * * 字符串的日期格式的计算两个日期之间相差的天数 * @param smdate * @param bdate * @author lingxin * @date 2021/12/20 10:02 AM * @return int */ public static int daysBetween(String smdate,String bdate) throws ParseException{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(smdate)); long time1 = cal.getTimeInMillis(); cal.setTime(sdf.parse(bdate)); long time2 = cal.getTimeInMillis(); long between_days=((time2-time1)/(1000*3600*24))+1; return Integer.parseInt(String.valueOf(between_days)); } /** * * 字符串的日期格式的计算两个日期之间相差的月数 * @param smdate * @param bdate * @author lingxin * @date 2021/12/20 10:02 AM * @return int */ public static int monthsBetween(String smdate,String bdate) throws ParseException{ Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(getDate(smdate)); c2.setTime(getDate(bdate)); int year1 = c1.get(Calendar.YEAR); int year2 = c2.get(Calendar.YEAR); int month1 = c1.get(Calendar.MONTH); int month2 = c2.get(Calendar.MONTH); int day1 = c1.get(Calendar.DAY_OF_MONTH); int day2 = c2.get(Calendar.DAY_OF_MONTH); // 获取年的差值 int yearInterval = year1 - year2; // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数 if (month1 < month2 || month1 == month2 && day1 < day2) { yearInterval--; } // 获取月数差值 int monthInterval = (month1 + 12) - month2; if (day1 < day2) { monthInterval--; } monthInterval %= 12; int monthsDiff = Math.abs(yearInterval * 12 + monthInterval); return monthsDiff; } /** * * 字符串的日期格式的计算两个日期之间相差的年数 * @param smdate * @param bdate * @author lingxin * @date 2021/12/22 4:49 PM * @return int */ public static int yearsBetween(String smdate,String bdate) throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar bef = Calendar.getInstance(); Calendar aft = Calendar.getInstance(); bef.setTime(sdf.parse(smdate)); aft.setTime(sdf.parse(bdate)); int surplus = aft.get(Calendar.DATE) - bef.get(Calendar.DATE); int result = aft.get(Calendar.MONTH) - bef.get(Calendar.MONTH); int year = aft.get(Calendar.YEAR) - bef.get(Calendar.YEAR); System.out.println(result); if(result < 0){ result = 1; }else if(result == 0){ result = surplus <= 0 ? 0 : 1; }else{ result = 0; } return Math.abs(year + result)+1; } /** * * 获取月份第一天 * @param month * @author lingxin * @date 2021/12/22 4:01 PM * @return java.lang.String */ public static String getFirstForMonth(String month) throws ParseException { String[] s = month.split("-"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); return format.format(getFirstDay(Integer.valueOf(s[0]), Integer.valueOf(s[1]))); } /** * * 获取月份最后一天 * @param month * @author lingxin * @date 2021/12/22 4:01 PM * @return java.lang.String */ public static String getLastForMonth(String month){ String[] s = month.split("-"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); return getLastDayOfMonth(Integer.valueOf(s[0]), Integer.valueOf(s[1])); } public static Date getFirstDay(int year, int month) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, 1); return c.getTime(); } public static String getfisrtdayofmonth(int year,int month) { Calendar cal = Calendar.getInstance(); //设置年份 cal.set(Calendar.YEAR,year); //设置月份 cal.set(Calendar.MONTH, month-1); //获取某月最小天数 int firstday = cal.getActualMinimum(Calendar.DAY_OF_MONTH); //设置日历中月份的最小天数 cal.set(Calendar.DAY_OF_MONTH, firstday); //格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); String firstdayofmonth = sdf.format(cal.getTime()); return firstdayofmonth; } public static Date getLastDay(int year, int month) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); c.set(Calendar.DAY_OF_MONTH, lastDay); return c.getTime(); } /** * 获取某月的最后一天 * */ public static String getLastDayOfMonth(String day) { String[] days = day.split("-"); Calendar cal = Calendar.getInstance(); //设置年份 cal.set(Calendar.YEAR,Integer.valueOf(days[0])); //设置月份 cal.set(Calendar.MONTH, Integer.valueOf(days[1])-1); //获取某月最大天数 int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //设置日历中月份的最大天数 cal.set(Calendar.DAY_OF_MONTH, lastDay); //格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String lastDayOfMonth = sdf.format(cal.getTime()); return lastDayOfMonth; } /** * 月份加一 * @param date * @return */ public static String monthAddFrist(String date){ DateFormat df=new SimpleDateFormat("yyyy-MM-dd"); try { Calendar ct=Calendar.getInstance(); ct.setTime(df.parse(date)); ct.add(Calendar.MONTH, +1); return df.format(ct.getTime()); } catch (ParseException e) { e.printStackTrace(); } return ""; } /** * 年份加一 * @param date * @return */ public static String yearAddFrist(String date){ DateFormat df=new SimpleDateFormat("yyyy-MM-dd"); try { Calendar ct=Calendar.getInstance(); ct.setTime(df.parse(date)); ct.add(Calendar.YEAR, +1); return df.format(ct.getTime()); } catch (ParseException e) { e.printStackTrace(); } return ""; } //数字转阿拉伯数字 public static String foematInteger(int num) { char[] val = String.valueOf(num).toCharArray(); int len = val.length; StringBuilder sb = new StringBuilder(); for (int i = 0; i < len; i++) { String m = val[i] + ""; int n = Integer.valueOf(m); boolean isZero = n == 0; String unit = units[(len - 1) - i]; if (isZero) { if ('0' == val[i - 1]) { continue; } else { sb.append(numArray[n]); } } else { sb.append(numArray[n]); sb.append(unit); } } return sb.toString(); } /** * 获取某年第一天日期 * @param year 年份 * @return Date */ public static String getYearFirst(int year){ Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, year); Date currYearFirst = calendar.getTime(); String date = getDate(currYearFirst); return date; } /** * 获取某年最后一天日期 * @param year 年份 * @return Date */ public static String getYearLast(int year){ Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, year); calendar.roll(Calendar.DAY_OF_YEAR, -1); Date currYearLast = calendar.getTime(); String date = getDate(currYearLast); return date; } public static int daysBetweenformoney(Date date1,Date date2){ Calendar cal = Calendar.getInstance(); cal.setTime(date1); long time1 = cal.getTimeInMillis(); cal.setTime(date2); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } /** * 获取指定月份的前几个月 * @param strDate 传入的字符串时间 * @param num 想获取前几个月 就传几 * @return */ public static String getStrDate(String strDate,int num ){ String stringDate=""; try { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");//格式化为2017-10 Date month=formatter.parse(strDate); Calendar calendar = Calendar.getInstance();//得到Calendar实例 calendar.setTime(month); calendar.add(Calendar.MONTH, -num);//把月份减三个月 Date starDate = calendar.getTime();//得到时间赋给Data stringDate = formatter.format(starDate);//使用格式化Data return stringDate; }catch (Exception e){ e.printStackTrace(); return stringDate; } } public static String getLastDayOfMonth(int year,int month) { Calendar cal = Calendar.getInstance(); //设置年份 cal.set(Calendar.YEAR,year); //设置月份 cal.set(Calendar.MONTH, month-1); //获取某月最大天数 int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //设置日历中月份的最大天数 cal.set(Calendar.DAY_OF_MONTH, lastDay); //格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String lastDayOfMonth = sdf.format(cal.getTime()); return lastDayOfMonth; } }