package com.dhcc.finance.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.commons.lang3.ArrayUtils; import java.util.*; import lombok.extern.slf4j.Slf4j; /** * 功能描述:财务日期工具类 * @author dml * @date 2019年4月25日 上午11:13:34 * @修改日志: */ @Slf4j public class FinanceDateUtil { /** * 功能描述:计算指定格式时间字符串月份加减 * @param dateStr 时间字符串 * @param format 格式 * @param amount 加减数 * @return String * @author dml * @date 2019年4月25日 下午4:56:00 * @修改日志: */ public static String getLastMonth(String dateStr,String format,int amount){ SimpleDateFormat sdf = new SimpleDateFormat(format); Date parse = null; try { parse = sdf.parse(dateStr); } catch (ParseException e) { log.error("转换出错>>",e); return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(parse); calendar.add(Calendar.MONTH, amount); Date time = calendar.getTime(); return sdf.format(time); } /** * 功能描述:获取指定时间所在会计期间 * @param date 时间 * @return String * @author dml * @date 2019年5月22日 下午5:28:55 * @修改日志: */ public static String getPeriod(Date date){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); String format = sdf.format(date); return format; } /** * 功能描述:获取指定日期所在会计期间 * @param date * @param pattern * @return String * @author dml * @date 2019年11月14日 下午3:38:28 * @修改日志: */ public static String getPeriodByDatestr(String date ,String pattern){ try { SimpleDateFormat sdf = new SimpleDateFormat(pattern); Date parse = sdf.parse(date); String period = getPeriod(parse); return period; } catch (ParseException e) { log.error("日期转换失败>>>>>>>>",e); } return null; } /** * 功能描述:获取当前会计期间的最后一天 * @param dateStr * @return String * @author dml * @date 2019年7月28日 下午3:19:45 * @修改日志: */ public static String getMonthLastDay(String dateStr){ Date monthLastDayDate = getMonthLastDayDate(dateStr); if (monthLastDayDate == null) { return null; } SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); String format = sdf2.format(monthLastDayDate); return format; } /** * 功能描述:获取当前会计期间的最后一天(DATE类型) * @param dateStr * @return Date * @author dml * @date 2019年10月22日 上午9:48:24 * @修改日志: */ public static Date getMonthLastDayDate(String dateStr){ try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); Date parse = sdf.parse(dateStr); Calendar cal = Calendar.getInstance(); cal.setTime(parse); cal.set(Calendar.DATE, 1); cal.roll(Calendar.DATE, -1); Date time = cal.getTime(); return time; } catch (ParseException e) { log.error("日期转换失败>>>>>>>>",e); } return null; } /** * 功能描述:获取当前会计期间的第一天 * @param dateStr * @return Date * @author dml * @date 2019年10月22日 上午9:48:24 * @修改日志: */ public static String getMonthFirstDayDate(String dateStr){ try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); Date parse = sdf.parse(dateStr); Calendar cal = Calendar.getInstance(); cal.setTime(parse); cal.set(Calendar.DATE, 1); Date time = cal.getTime(); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); String format = sdf2.format(time); return format; } catch (ParseException e) { log.error("日期转换失败>>>>>>>>",e); } return null; } /** * 功能描述:获取当前会计期间的第一天(DATE类型) * @param dateStr * @return Date * @author dml * @date 2019年10月22日 上午9:48:24 * @修改日志: */ public static Date getMonthFirstDay(String dateStr){ try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); Date parse = sdf.parse(dateStr); Calendar cal = Calendar.getInstance(); cal.setTime(parse); cal.set(Calendar.DATE, 1); Date time = cal.getTime(); return time; } catch (ParseException e) { log.error("日期转换失败>>>>>>>>",e); } return null; } /** * 功能描述:获取一个年月的数值 * @param date * @return int *@author likai *@data 2020年4月15日下午5:44:49 *修改日志 */ 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; } /** * 功能描述:获取某个日期的前一天或后一天,d为1时获取前一天,d为-1时获取后一天 * @param time * @return String * @author likai * @date 2020年5月26日 下午2:25:50 * @修改日志: */ public static String getLastDay(String time,int d){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); Date date=null; try { date = sdf.parse(time); } catch (ParseException e) { e.printStackTrace(); } calendar.setTime(date); int day=calendar.get(Calendar.DATE); // 此处修改为+1则是获取后一天 calendar.set(Calendar.DATE,day-d); String lastDay = sdf.format(calendar.getTime()); return lastDay; } /** * 功能描述:获取当前月份的下i个月份 * @param i * @return String * @author likai * @date 2020年7月20日 下午3:25:16 * @修改日志: */ public static String getLast12Months(int i) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.MONTH, -i); Date m = c.getTime(); return sdf.format(m); } }