importorg.apache.commons.lang3.StringUtils;
importjava.time.*;importjava.time.format.DateTimeFormatter;importjava.time.temporal.ChronoUnit;importjava.time.temporal.TemporalAdjusters;importjava.util.*;
public classDateUtil {
static finalDateTimeFormatter dtf= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");static finalDateTimeFormatter dtf_yyyyMMdd= DateTimeFormatter.ofPattern("yyyyMMdd");static finalDateTimeFormatter dtf_yyyyMM= DateTimeFormatter.ofPattern("yyyyMM");static finalDateTimeFormatter dtf_yyyyMM2= DateTimeFormatter.ofPattern("yyyy年MM月");static finalDateTimeFormatter dtf_yyyyMMddHHmmss= DateTimeFormatter.ofPattern("yyyyMMddHHmmss");static finalDateTimeFormatter dtf_yyyyMMddHHmm= DateTimeFormatter.ofPattern("yyyyMMddHHmm");static finalDateTimeFormatter dtf_yyyyMMddHH= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");static finalDateTimeFormatter dtf_yyyyMMddHHss= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");static finalDateTimeFormatter dtf_yyyyMMdd2= DateTimeFormatter.ofPattern("yyyy-MM-dd");public staticString now(){
returndtf.format(LocalDateTime.now());}
public staticString now_yyyyMMdd(){
returndtf_yyyyMMdd.format(LocalDateTime.now());}
public staticString now_yyyy(){
returnLocalDateTime.now().getYear()+"";}
public static intnow_yyyy_int(){
returnLocalDateTime.now().getYear();}
public staticString now_MM(){
intMM = LocalDateTime.now().getMonthValue();if(MM < 10){
return"0"+MM;}
returnMM+"";}
public staticString now_yyyyMM(){
returndtf_yyyyMM.format(LocalDateTime.now());}
public static intnow_MM_int(){
returnLocalDateTime.now().getMonthValue();}
public static intnow_day_int(){
returnLocalDateTime.now().getDayOfMonth();}
public static intnow_day_int(longmodified){
returnInstant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime().getDayOfMonth();}
public staticString fmt(longmodified){
returndtf_yyyyMMdd.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());}
public staticString fmt_yyyyMM(longmodified){
returndtf_yyyyMM.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());}
public staticString fmt_yyyyMM2(longmodified){
returndtf_yyyyMM2.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());}
public staticString fmt_yyyyMMddHHmmss(longmodified){
returndtf_yyyyMMddHHss.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());}
/*** 本年已过天数*@param*@return*/public static longnow_dayCount_int(){
returnChronoUnit.DAYS.between(LocalDate.ofYearDay(LocalDate.now().getYear(),1),LocalDate.now());}
public staticString now_yyyyMMddHH(){
returndtf_yyyyMMddHH.format(LocalDateTime.now());}
public staticString now_yyyyMMdd2(){
returndtf_yyyyMMdd2.format(LocalDateTime.now());}
public staticString now_yyyyMMddHHmmss(){
returndtf_yyyyMMddHHmmss.format(LocalDateTime.now());}
//月的第一天日期public staticLocalDate monthFast(intyear,intmonth){
LocalDate start = LocalDate.of(year,month,1);if(start.getDayOfWeek().getValue() >= 1) {
start = start.minusDays(start.getDayOfWeek().getValue());}
returnstart;}
public staticLocalDate monthLast(intyear,intmonth){
LocalDate start = LocalDate.of(year,month,1);start = start.with(TemporalAdjusters.lastDayOfMonth());if(start.getDayOfWeek().getValue() >= 1) {
start = start.minusDays(start.getDayOfWeek().getValue()-1);}
returnstart;}
public staticLocalDate monthWeekLastDate(intyear,intmonth){
LocalDate start = monthLast(year,month);start = start.plusDays(6);returnstart;}
public staticLocalDate monthWeekFastDate(intyear,intmonth){
LocalDate start = LocalDate.of(year,month,1);if(start.getDayOfWeek().getValue() >= 1) {
start = start.minusDays(start.getDayOfWeek().getValue()-1);}
returnstart;}
public static intmonthWeekDateCount(intyear,intmonth){
LocalDate start = DateUtil.monthWeekFastDate(year,month);LocalDate end = DateUtil.monthWeekLastDate(year,month);returnLong.valueOf(end.toEpochDay()-start.toEpochDay()).intValue()+1;}
public staticList monthWeekDates(intyear, intmonth){
String date = LocalDate.now().toString();returnmonthWeekDates(year,month,date);}
/*** 根据指定日期计算本周周一至周日的日期*@paramdate*@return*/public staticList weekDates(String date){
List weekDates = newLinkedList<>();String[] date2 = date.split("-");intyear2 = Integer.valueOf(date2[0]).intValue();intmonth2 = Integer.valueOf(date2[1]).intValue();intd2 = Integer.valueOf(date2[2]).intValue();LocalDate start = LocalDate.of(year2,month2,d2);// System.out.print("日期:"+date+",周几:"+start.getDayOfWeek().getValue());if(start.getDayOfWeek().getValue() > 1) {
//计算本周,周一的日期start = start.minusDays(start.getDayOfWeek().getValue()).plusDays(1);// System.out.println(",日期:"+start+",周几:"+start.getDayOfWeek().getValue());}
for(inta = 0;a< 7;a++){
weekDates.add(start.plusDays(a).toString());}
returnweekDates;}
/*** 根据指定日期计算本周往后计算指定周数的周一至周日的日期*@paramdate*@return*/public staticList weekDates(String date,intweekCount){
List> weeks = newLinkedList();List weekDates = newLinkedList<>();String[] date2 = date.split("-");intyear2 = Integer.valueOf(date2[0]).intValue();intmonth2 = Integer.valueOf(date2[1]).intValue();intd2 = Integer.valueOf(date2[2]).intValue();LocalDate start = LocalDate.of(year2,month2,d2);// System.out.print("日期:"+date+",周几:"+start.getDayOfWeek().getValue());if(start.getDayOfWeek().getValue() > 1) {
//计算本周,周一的日期start = start.minusDays(start.getDayOfWeek().getValue()).plusDays(1);// System.out.println(",日期:"+start+",周几:"+start.getDayOfWeek().getValue());}
for(inta = 0,alen = weekCount*7;a < alen;a++){
weekDates.add(start.plusDays(a).toString());if(weekDates.size() == 7){
List weekDates2 = newLinkedList<>();weekDates2.addAll(weekDates);weeks.add(weekDates2);weekDates = newLinkedList<>();}
}
returnweeks;}
/*** 返回指定年份月份的每周的周一到周日集合,超出下一周不在范围,超出本月不在范围*@paramyear年份*@parammonth月份*@paramdate日期*@return*/public staticList monthWeekDates(intyear, intmonth,String date){
List> weeks = newLinkedList();List weekDates = newLinkedList<>();LocalDate start = null,end = null;if(StringUtils.isNotEmpty(date)){
String[] date2 = date.split("-");intyear2 = Integer.valueOf(date2[0]).intValue();intmonth2 = Integer.valueOf(date2[1]).intValue();intd2 = Integer.valueOf(date2[2]).intValue();end = LocalDate.of(year2,month2,d2);if(end.getDayOfWeek().getValue() >= 1) {
end = end.plusDays(7- end.getDayOfWeek().getValue()+1);}
if(end.getMonthValue() > month){
end = end.minusDays(7);}
}
// System.out.println("日期:"+date+",下个周一:"+end);for(inti = 0,ilen = monthWeekDateCount(year,month);i< ilen;i++) {
start = DateUtil.monthWeekFastDate(year,month);start = start.plusDays(i);weekDates.add(start.toString());if(weekDates.size() == 7){
List weekDates2 = newLinkedList<>();weekDates2.addAll(weekDates);weeks.add(weekDates2);weekDates = newLinkedList<>();if(start.compareTo(end) >= 0){
break;}
}
}
returnweeks;}
public staticList> desc2(List> list){
List> weeks = newArrayList<>();for(inta = list.size();a>0;a--){
weeks.add(list.get(a-1));}
returnweeks;}
/*** 计算指定日期所属的周一,周天日期*@paramdate*@return*/public staticString[] mondaySundayDate(String date) {
String startDate = date;intc = DateUtil.getWeekNum(date);if(c > 1){
startDate = DateUtil.minusDays2(date,c-1);}
String endDate = DateUtil.plusDays2(startDate,6);return newString[]{startDate,endDate};}
/*** 返回 1-7 中的一天*@return*/public static intgetWeekNum() {
LocalDate currentDate = LocalDate.now();returngetWeekNum(currentDate);}
/*** 返回 1-7 中的一天*@return*/public static intgetWeekNum(String date) {
returngetWeekNum(LocalDate.parse(date,dtf_yyyyMMdd2));}
/*** 返回 1-7 中的一天*@return*/public static intgetWeekNum(LocalDate currentDate) {
String[][] strArray = {
{"MONDAY","1"},{"TUESDAY","2"},{"WEDNESDAY","3"},{"THURSDAY","4"},{"FRIDAY","5"},{"SATURDAY","6"},{"SUNDAY","7"}
};
String k = String.valueOf(currentDate.getDayOfWeek());//获取行数for(inti = 0;i < strArray.length;i++) {
if(k.equals(strArray[i][0])) {
k = strArray[i][1];break;}
}
returnInteger.parseInt(k);}
/*** 减天数*@paramday*@return*/public staticString minusDays2(String date,intday) {
returndtf_yyyyMMdd2.format(LocalDate.parse(date,dtf_yyyyMMdd2).minusDays(day));}
/*** 减天数*@paramday*@return*/public staticString minusDays2(LocalDate date,intday) {
returndtf_yyyyMMdd.format(date.minusDays(day));}
/*** 减天数*@paramday*@return*/public staticString minusDays(intday){
returndtf_yyyyMMdd.format(LocalDateTime.now().minusDays(day));}
/*** 加天数*@paramday*@return*/public staticString plusDays(intday){
returndtf_yyyyMMdd.format(LocalDateTime.now().plusDays(day));}
/*** 加天数*@paramdate*@paramday*@return*/public staticString plusDays2(String date,intday){
returndtf_yyyyMMdd2.format(LocalDate.parse(date,dtf_yyyyMMdd2).plusDays(day));}
/*** 加月数*@parammonth*@return*/public staticString plusMonths(intmonth){
returndtf_yyyyMMdd.format(LocalDateTime.now().plusMonths(month));}
/*** 加月数*@date基础时间 202004011820*@month加几个月*@return*/public staticLong plusMonths(Long date,intmonth){
if(date < 200000000000L|| date > 299999999999L){
return0L;}
returnLong.valueOf(dtf_yyyyMMddHHmm.format(convert_dtfyyyyMMddHHmm(""+date).plusMonths(month)));}
/*** 加小时*@paramhour*@return*/public staticString plusHours(inthour){
returndtf.format(LocalDateTime.now().plusHours(hour));}
/*** 加小时*@date基础时间 202004011820*@month加几小时*@return*/public staticLong plusHours(Long date,inthour){
if(date < 200000000000L|| date > 299999999999L){
return0L;}
returnLong.valueOf(dtf.format(convert_dtfyyyyMMddHHmm(""+date).plusHours(hour)));}
/*** 字符串转指定格式日期*@paramdateyyyy-MM-dd HH:mm:ss 格式的时间*@return*/public staticLocalDateTime convert_dtf(String date){
returnLocalDateTime.parse(date,dtf);}
/*** 字符串转指定格式日期*@paramdateyyyy-MM-dd HH:mm 格式的时间*@return*/public staticLocalDateTime convert_dtfyyyyMMddHHmm(String date){
returnLocalDateTime.parse(date,dtf_yyyyMMddHHmm);}
/*** 字符串转指定格式日期*@paramdateyyyy-MM-dd HH:mm:ss 格式的时间*@return*/public staticLocalDateTime convert_dtfyyyyMMddHHmmss(String date){
returnLocalDateTime.parse(date,dtf_yyyyMMddHHmmss);}
/*** 将日期转换格式返回 yyyyMMddHHmm*@paramdateyyyy-MM-dd HH:mm:ss 格式的时间*@return*/public staticLong get_dtfyyyyMMddHHmm(String date){
returnLong.valueOf( LocalDateTime.parse(date,dtf).format(dtf_yyyyMMddHHmm));}
/*** 获取指定格式的当前日期*@return*/public staticLong get_yyyyMMddHHmmss(String date){
returnLong.valueOf( LocalDateTime.parse(date,dtf).format(dtf_yyyyMMddHHmmss));}
/*** 获取指定格式的当前日期*@return*/public staticLong get_yyyyMMddHHmmss(){
returnLong.valueOf(dtf_yyyyMMddHHmmss.format(LocalDateTime.now()));}
/*** 获取指定格式的当前日期*@return*/public staticLong get_yyyyMMddHHmm(){
returnLong.valueOf(dtf_yyyyMMddHHmm.format(LocalDateTime.now()));}
/*** 日期格式化为*@paramdateyyyy-MM-dd HH:mm:ss*@return*/public staticString format_dtf(LocalDateTime date){
returndtf_yyyyMMddHHmmss.format(date);}
/*** 日期格式化为*@paramtimestamp*@return*/public staticString format_dtf_long(Long timestamp){
Instant instant = Instant.ofEpochMilli(timestamp);ZoneId zone = ZoneId.systemDefault();returndtf_yyyyMMddHHmmss.format(LocalDateTime.ofInstant(instant,zone));}
/*** 日期格式化为*@paramtimestamp*@return*/public staticString format_dtf(Long timestamp){
Instant instant = Instant.ofEpochMilli(timestamp);ZoneId zone = ZoneId.systemDefault();returndtf.format(LocalDateTime.ofInstant(instant,zone));}
/*** 日期格式化为*@paramdateyyyyMMddHHmm*@return*/public staticString format_yyyyMMddHHmm(LocalDateTime date){
returndtf_yyyyMMddHHmm.format(date);}
/*** 日期格式化为 yyyyMMddHHmm*@paramdateTime*@return*/public staticLong format_yyyyMMddHHmm_long(LocalDateTime dateTime){
returnLong.valueOf(format_yyyyMMddHHmm(dateTime));}
}