0
点赞
收藏
分享

微信扫一扫

DateUtil

witmy 2022-03-16 阅读 97


package com.hisense.cis.core.util;


import com.hisense.cis.core.exception.BusinessRuntimeException;

import org.apache.commons.lang3.time.DateUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.*;


public class DateUtil {

public static final SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public static final SimpleDateFormat timeFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");

public static final SimpleDateFormat timeFormat3 = new SimpleDateFormat("HH:mm");

public static final SimpleDateFormat timeFormat4 = new SimpleDateFormat("yyyyMMdd HH:mm");

public static final SimpleDateFormat timeFormat5 = new SimpleDateFormat("yyyyMMdd HH:mm:ss");

public static final SimpleDateFormat timeFormat6 = new SimpleDateFormat("yyyyMMddHHmmss");

public static final SimpleDateFormat timeFormat7 = new SimpleDateFormat("yyyyMMddHHmmssSSS");

public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

public static final SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyyMMdd");

public static final SimpleDateFormat dateFormat3 = new SimpleDateFormat("yyyy.MM.dd");

//新增日期格式 2020-08-14

public static final SimpleDateFormat dateFormat4 = new SimpleDateFormat("yyyy/MM/dd"); public static final SimpleDateFormat monthAndDayFormat = new SimpleDateFormat("MM/dd");

public static final SimpleDateFormat yearAndMonthFormat = new SimpleDateFormat("yyyy-MM");

public static final SimpleDateFormat yearAndMonthFormat2 = new SimpleDateFormat("yyyyMM");

public static final SimpleDateFormat yearFormat = new SimpleDateFormat("yyyyMM");

public static final SimpleDateFormat solrTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

public static final SimpleDateFormat onlyYearFormat = new SimpleDateFormat("yyyy");

private static final Logger log = LoggerFactory.getLogger(DateUtil.class);


/**

* 获取:从指定日期开始,相隔指定【跨度月】的,最后一天(如当前3月,跨度2个月,返回5月30号)

*

* @param startDate

* @param monthDuration

* @return

* @author caojun1@hisense.com

*/

public static Date getDuraMonthLastDay(Date startDate, int monthDuration) { if (startDate == null) {

startDate = new Date();

}

Calendar lastDate = Calendar.getInstance();

lastDate.setTime(startDate);

lastDate.add(Calendar.MONTH, monthDuration + 1);// 加n个月

lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天

lastDate.add(Calendar.DAY_OF_YEAR, -1);// 日期回滚一天,也就是本月最后一天

return lastDate.getTime(); }


/**

* 获取:从指定日期开始,相隔指定跨度【月】的,第一天(如当前3月,跨度2个月,返回5月1号)

*

* @param startDate

* @param monthDuration

* @return

* @author caojun1@hisense.com

*/

public static Date getDuraMonthFirstDay(Date startDate, int monthDuration) { if (startDate == null) {

startDate = new Date();

}

Calendar lastDate = Calendar.getInstance();

lastDate.setTime(startDate);

lastDate.add(Calendar.MONTH, monthDuration);// 加n-1个月

lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天

return lastDate.getTime(); }


/**

* 获取:从指定日期开始,相隔指定跨度【自然周】的,最后一天

*

* @param startDate

* @param weekDuration

* @return

*/

public static Date getDuraWeekLastDay(Date startDate, int weekDuration) { if (startDate == null) {

startDate = new Date();

}

Calendar lastDate = Calendar.getInstance();

lastDate.setTime(startDate);

lastDate.add(Calendar.WEEK_OF_YEAR, weekDuration + 1);// 加n个周

lastDate.set(Calendar.DAY_OF_WEEK, 1);// 把日期设置为当周第一天(上周日)

return lastDate.getTime(); }


/**

* 获取:从指定日期开始,相隔指定跨度【自然周】的,第一天

*

* @param startDate

* @param weekDuration

* @return

*/

public static Date getDuraWeekFirstDay(Date startDate, int weekDuration) { if (startDate == null) {

startDate = new Date();

}

Calendar lastDate = Calendar.getInstance();

lastDate.setTime(startDate);

lastDate.add(Calendar.WEEK_OF_YEAR, weekDuration);// 加n个周

lastDate.set(Calendar.DAY_OF_WEEK, 2);// 把日期设置为当周第二天(本周一)

return lastDate.getTime(); }


/**

* 获取:本周的下一周的周一

*

* @param startDate

* @param weekDuration

* @return

*/

public static Date getNextWeekFirstDay() { //下周周一

Calendar cal = Calendar.getInstance(); cal.add(Calendar.WEEK_OF_MONTH, 1);

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

Date monday = cal.getTime();

return monday;

}


/**

* 获取:指定【跨度月】的、连续的月(其中,date的日,同为当前日)(顺序:时间倒序)

*

* @param startDate 可空(空时,为当前日期)

* @param monthDuration 可负数(负数为前n个月)

* @return

*/

public static List<Date> getNextMonths(Date startDate, int monthDuration) { if (startDate == null) {

startDate = new Date();

}


List<Date> list = new ArrayList<Date>();

if (monthDuration > 0) {

Date d;

for (int i = 1; i < monthDuration + 1; i++) {

d = DateUtils.addMonths(startDate, i);

list.add(d);

}

} else {

Date d;

for (; monthDuration < 0; monthDuration++) {

d = DateUtils.addMonths(startDate, monthDuration);

list.add(d);

}

}


return list;

}


/**

* 获取:指定【跨度周】的、连续的所有自然周(其中,date的周,同为当前周)

*

* @param startDate 可空(空时,为当前日期)

* @param weekDuration 可负数(负数为前n个周)

* @return

*/

public static List<Date> getNextWeeks(Date startDate, int weekDuration) { if (startDate == null) {

startDate = new Date();

}


List<Date> list = new ArrayList<Date>();

int gap = 0;

if (weekDuration > 0) {

gap = 1;

} else {

gap = -1;

weekDuration = 0 - weekDuration;

}

for (int i = 0; i < weekDuration; i++) {

startDate = DateUtils.addWeeks(startDate, gap);

list.add(startDate);

}


return list;

}


/**

* monday

*

* @param dateStr format yyyymmdd

* @return

*/

public static Date getMondayDate(Long dateStr) { Calendar c = Calendar.getInstance();

try {

c.setTime(DateUtil.dateFormat2.parse(dateStr + ""));

} catch (ParseException e) {

log.error("date parse error @ " + dateStr, e);

throw new BusinessRuntimeException("日期@" + dateStr + "转为周一时 出现异常", "", e);

}

c.setFirstDayOfWeek(Calendar.MONDAY);

c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

return c.getTime();

}


/**

* sunday

*

* @param dateStr format yyyymmdd

* @return

*/

public static Date getSundayDate(Long dateStr) { Calendar c = Calendar.getInstance();

try {

c.setTime(DateUtil.dateFormat2.parse(dateStr + ""));

} catch (ParseException e) {

log.error("date parse error @ " + dateStr, e);

throw new BusinessRuntimeException("日期@" + dateStr + "转为周日时 出现异常", "", e);

}

c.setFirstDayOfWeek(Calendar.MONDAY);

c.set(Calendar.DAY_OF_WEEK, 7);

c.add(Calendar.DAY_OF_YEAR, 1);

Date sunday = c.getTime();

return sunday;

}


/**

* last day of month

*

* @param dateStr

* @return

*/

public static Date getMonthEndDate(Long dateStr) { Calendar c = Calendar.getInstance();

try {

c.setTime(DateUtil.dateFormat2.parse(dateStr + ""));

} catch (ParseException e) {

log.error("date parse error @ " + dateStr, e);

throw new BusinessRuntimeException("日期@" + dateStr + "转为周一时 出现异常", "", e);

}

c.add(Calendar.MONTH, 1);

c.set(Calendar.DAY_OF_MONTH, 1);

c.add(Calendar.DAY_OF_YEAR, -1);

Date monthEnd = c.getTime();

return monthEnd;

}


public static Date getDuraDayDate(String dateStr, int duraDays) {

Calendar c = Calendar.getInstance();

try {

c.setTime(DateUtil.dateFormat2.parse(dateStr));

} catch (ParseException e) {

log.error("date parse error @ " + dateStr, e);

throw new BusinessRuntimeException("日期@" + dateStr + "计算日期时 出现异常", "", e);

}

c.add(Calendar.DAY_OF_YEAR, duraDays);

return c.getTime();

}


public static Date getWfStartDate(Date date) {

Date cur = date == null ? new Date() : date;

try {

cur = dateFormat.parse(dateFormat.format(cur));

} catch (ParseException e) {

throw new BusinessRuntimeException("日期格式化出现异常", "");

}


Calendar curC = Calendar.getInstance();

curC.setTime(cur);


Calendar c = Calendar.getInstance();

c.setTime(cur);

c.set(Calendar.DAY_OF_WEEK, 4);

Date wensday = c.getTime();

if (c.after(curC)) {

c.add(Calendar.DAY_OF_YEAR, -7);

return c.getTime();

}

return wensday;

}


public static Date getWfEndDate(Date date) {

Date cur = date == null ? new Date() : date;

try {

cur = dateFormat.parse(dateFormat.format(cur));

} catch (ParseException e) {

throw new BusinessRuntimeException("日期格式化出现异常", "");

}

Calendar curC = Calendar.getInstance();

curC.setTime(cur);


Calendar c = Calendar.getInstance();

c.setTime(cur);

c.set(Calendar.DAY_OF_WEEK, 4);


if (c.after(curC)) {

c.add(Calendar.DAY_OF_YEAR, -1);

return c.getTime();

}

c.add(Calendar.DAY_OF_YEAR, 6);

return c.getTime();


}


public static String createDateSequence() {

Date date = new Date();

return timeFormat6.format(date);

}


public static String createDateSequence(String prefix, String suffix) {

Date date = new Date();

return prefix + timeFormat6.format(date) + suffix;

}


public static String createDateSequenceWithSuffix(String suffix) {

Date date = new Date();

return timeFormat6.format(date) + suffix;

}


public static Date getEndOfToday() {

Calendar c = Calendar.getInstance();

c.set(Calendar.HOUR_OF_DAY, 23);

c.set(Calendar.MINUTE, 59);

c.set(Calendar.SECOND, 59);

return c.getTime();

}


public static String getCurrentWeekMonday() {

Calendar calendar = Calendar.getInstance();

int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);

if (1 == dayWeek) {

calendar.add(Calendar.DAY_OF_MONTH, -1);

}

calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

return dateFormat2.format(calendar.getTime());

}


public static String getLastWeekMonday() {

Calendar calendar = Calendar.getInstance();

int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);

if (1 == dayWeek) {

calendar.add(Calendar.DAY_OF_MONTH, -1);

}

calendar.add(Calendar.DAY_OF_WEEK, -7);

calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

return dateFormat2.format(calendar.getTime());

}


/**

* 获得指定日期

*

* @param date 指定日期

* @param i 天数 (例:1 后一天,-5 前五天)

* @return

*/

public static Date getSpecifiedDay(Date date, int i) { Calendar c = Calendar.getInstance();

c.setTime(date);

int day = c.get(Calendar.DATE);

c.set(Calendar.DATE, day + i);

return c.getTime();

}


/**

* 获取最近几个月

* */

public static List<String> getLastMonStr(String dateStr ,int num ){ Calendar c = Calendar.getInstance();

int year = Integer.parseInt(dateStr.substring(0,4));

int month = Integer.parseInt(dateStr.substring(4));

c.set(Calendar.YEAR,year);

c.set(Calendar.MONTH,month);

c.set(Calendar.DATE,1);

List<String> result = new ArrayList<>(num);

c.add(Calendar.MONTH,-num);

for(int i =0 ; i< num ; i++){

Date date = c.getTime();

result.add(DateUtil.yearFormat.format(date));

c.add(Calendar.MONTH,1);

}

return result;

}


/**

* 获取下周一时间

* @param date

* @return

*/

public static Date getNextWeekMonday(Date date) { Calendar cal = Calendar.getInstance();

cal.setTime(getThisWeekMonday(date));

cal.add(Calendar.DATE, 7);

return cal.getTime();

}


/**

* 获取这周周一

* @param date

* @return

*/

public static Date getThisWeekMonday(Date date) { Calendar cal = Calendar.getInstance();

cal.setTime(date);

// 获得当前日期是一个星期的第几天

int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if (1 == dayWeek) {

cal.add(Calendar.DAY_OF_MONTH, -1);

}

// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一

cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天

int day = cal.get(Calendar.DAY_OF_WEEK); // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值

cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day); return cal.getTime();

}


/**

* 字符串转日期

* @param queryType

* @return

*/

public static Date tranDate(String queryType){ try {

Date paramsDate = new SimpleDateFormat("yyyyMMdd").parse(queryType);

return DateUtil.getNextWeekMonday(paramsDate);

} catch (ParseException e) {

e.printStackTrace();

}

return null;

}

}



举报

相关推荐

0 条评论