package org.dromara.demo.util;
|
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import org.springframework.util.StringUtils;
|
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
public class PeriodDate {
|
public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
|
|
//今天
|
public String today = DateUtil.today();
|
public DateTime date = DateUtil.date();
|
//本月
|
public String month = DateUtil.format(date, "M");
|
//本周的第一天
|
public String weekFirst = PeriodDate.getThisWeekOfFirstDate();
|
//本周的最后一天
|
public String weekEnd = DateUtil.format(DateUtil.offsetDay(date, 4), "yyyy-MM-dd");
|
//本月的第一天
|
public String MonthFirst = PeriodDate.getThisMonthOfFirstDate(0);
|
//本月的最后一天
|
public String MonthEnd = PeriodDate.getThisMouthLastDay();
|
//本季度的最后一天
|
public String lastdateTimSeason = PeriodDate.getCurrQuarter(Integer.valueOf(PeriodDate.getQuarter()))[1];
|
//本季度的第一天
|
public String firstdateTimSeason = PeriodDate.getCurrQuarter(Integer.valueOf(PeriodDate.getQuarter()))[0];
|
//本月天数
|
public int daysInMonth = PeriodDate.getDaysOfMonth();
|
|
public static String changeSqlNotNull(String sql) {
|
String[] strings = sql.split(",");
|
String returnSql = "";
|
for (String str : strings) {
|
if (str.contains("''")) {
|
returnSql = returnSql + str + ",";
|
} else {
|
returnSql = returnSql + "ifnull(" + str + ",'') " + str + ",";
|
|
}
|
}
|
return returnSql.substring(0, returnSql.length() - 1);
|
}
|
|
|
/**
|
* 获取两个日期之间的所有日期(字符串格式, 按天计算)
|
*
|
* @param startTime String 开始时间 yyyy-MM-dd
|
* @param endTime String 结束时间 yyyy-MM-dd
|
* @return
|
*/
|
public static List<String> getBetweenDays(String startTime, String endTime) throws ParseException {
|
if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
|
return null;
|
}
|
//1、定义转换格式
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
Date start = df.parse(startTime);
|
Date end = df.parse(endTime);
|
if (StringUtils.isEmpty(start) || StringUtils.isEmpty(end)) {
|
return null;
|
}
|
List<String> result = new ArrayList<String>();
|
|
Calendar tempStart = Calendar.getInstance();
|
tempStart.setTime(start);
|
|
tempStart.add(Calendar.DAY_OF_YEAR, 1);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
Calendar tempEnd = Calendar.getInstance();
|
tempEnd.setTime(end);
|
result.add(sdf.format(start));
|
while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) {
|
result.add(sdf.format(tempStart.getTime()));
|
tempStart.add(Calendar.DAY_OF_YEAR, 1);
|
}
|
return result;
|
}
|
|
/**
|
* 本周的第一天
|
*
|
* @return
|
*/
|
public static String getThisWeekOfFirstDate() {
|
SimpleDateFormat format = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
|
Calendar calendar = Calendar.getInstance();
|
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
return format.format(calendar.getTime());
|
}
|
|
|
/**
|
* @param i 为0表示本月,为1表示下月,为-1表示上月
|
* @return
|
* @throws
|
* @Title: DateUtil
|
* @Description: 获取本月当前时间(或者上月下月)
|
* @author lin
|
* @since 2019年12月5日下午4:02:44
|
*/
|
public static String getTime1(Integer i) {
|
Calendar calendar = Calendar.getInstance();
|
if (i != null) {
|
calendar.add(Calendar.MONTH, i);
|
}
|
int year = calendar.get(Calendar.YEAR);
|
int month = calendar.get(Calendar.MONTH);
|
int day = calendar.get(Calendar.DATE);
|
return year + "-" + (month + 1) + "-" + day;
|
}
|
|
/**
|
* @param //i为0表示本月为1表示下月
|
* @return
|
* @throws
|
* @Title: DateUtil
|
* @Description: 获取本月第一天(获取本月的第一天)
|
* @author lin
|
* @since 2019年12月5日下午3:59:55
|
*/
|
public static String getThisMonthOfFirstDate(Integer i) {
|
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
|
Calendar calendar = Calendar.getInstance();
|
if (i != null) {
|
calendar.add(Calendar.MONTH, i);
|
}
|
calendar.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
|
return format.format(calendar.getTime());
|
}
|
|
/**
|
* 获取本月最后一天
|
*
|
* @return
|
*/
|
public static String getThisMouthLastDay() {
|
//设置时间格式
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
//获得实体类
|
Calendar ca = Calendar.getInstance();
|
//设置最后一天
|
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
|
//最后一天格式化
|
String lastDay = format.format(ca.getTime());
|
return lastDay;
|
}
|
|
/**
|
* 某一个月第一天和最后一天
|
*
|
* @param date 指定日期
|
* @param pattern 日期格式
|
* @param //isNeedHms是否需要时分秒
|
* @return
|
*/
|
public static Map<String, Object> getFirstLastDayByMonth(Date date,
|
String pattern, boolean isNeedHms) {
|
SimpleDateFormat df = new SimpleDateFormat(pattern);
|
Calendar calendar = Calendar.getInstance();
|
|
calendar.setTime(date);
|
Date theDate = calendar.getTime();
|
|
// 第一天
|
GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
|
gcLast.setTime(theDate);
|
gcLast.set(Calendar.DAY_OF_MONTH, 1);
|
String day_first = df.format(gcLast.getTime());
|
StringBuffer str = new StringBuffer().append(day_first);
|
if (isNeedHms) {
|
str.append(" 00:00:00");
|
}
|
day_first = str.toString();
|
|
// 最后一天
|
calendar.add(Calendar.MONTH, 1); // 加一个月
|
calendar.set(Calendar.DATE, 1); // 设置为该月第一天
|
calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
|
String day_last = df.format(calendar.getTime());
|
StringBuffer endStr = new StringBuffer().append(day_last);
|
if (isNeedHms) {
|
endStr.append(" 23:59:59");
|
}
|
day_last = endStr.toString();
|
|
Map<String, Object> map = new HashMap<String, Object>();
|
map.put("first", day_first);
|
map.put("last", day_last);
|
return map;
|
}
|
|
|
/**
|
* 获取当前季度
|
*/
|
public static String getQuarter() {
|
Calendar c = Calendar.getInstance();
|
int month = c.get(Calendar.MONTH) + 1;
|
int quarter = 0;
|
if (month >= 1 && month <= 3) {
|
quarter = 1;
|
} else if (month >= 4 && month <= 6) {
|
quarter = 2;
|
} else if (month >= 7 && month <= 9) {
|
quarter = 3;
|
} else {
|
quarter = 4;
|
}
|
return quarter + "";
|
}
|
|
/**
|
* 获取某季度的第一天和最后一天
|
*
|
* @param //num第几季度
|
*/
|
public static String[] getCurrQuarter(int num) {
|
String[] s = new String[2];
|
String str = "";
|
// 设置本年的季
|
Calendar quarterCalendar = null;
|
switch (num) {
|
case 1: // 本年到现在经过了一个季度,在加上前4个季度
|
quarterCalendar = Calendar.getInstance();
|
quarterCalendar.set(Calendar.MONTH, 3);
|
quarterCalendar.set(Calendar.DATE, 1);
|
quarterCalendar.add(Calendar.DATE, -1);
|
str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
|
s[0] = str.substring(0, str.length() - 5) + "01-01";
|
s[1] = str;
|
break;
|
case 2: // 本年到现在经过了二个季度,在加上前三个季度
|
quarterCalendar = Calendar.getInstance();
|
quarterCalendar.set(Calendar.MONTH, 6);
|
quarterCalendar.set(Calendar.DATE, 1);
|
quarterCalendar.add(Calendar.DATE, -1);
|
str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
|
s[0] = str.substring(0, str.length() - 5) + "04-01";
|
s[1] = str;
|
break;
|
case 3:// 本年到现在经过了三个季度,在加上前二个季度
|
quarterCalendar = Calendar.getInstance();
|
quarterCalendar.set(Calendar.MONTH, 9);
|
quarterCalendar.set(Calendar.DATE, 1);
|
quarterCalendar.add(Calendar.DATE, -1);
|
str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
|
s[0] = str.substring(0, str.length() - 5) + "07-01";
|
s[1] = str;
|
break;
|
case 4:// 本年到现在经过了四个季度,在加上前一个季度
|
quarterCalendar = Calendar.getInstance();
|
str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
|
s[0] = str.substring(0, str.length() - 5) + "10-01";
|
s[1] = str.substring(0, str.length() - 5) + "12-31";
|
break;
|
}
|
return s;
|
}
|
|
/**
|
* 用途:以指定的格式格式化日期字符串
|
*
|
* @param pattern 字符串的格式
|
* @param currentDate 被格式化日期
|
* @return String 已格式化的日期字符串
|
* @throws NullPointerException 如果参数为空
|
*/
|
public static String formatDate(Date currentDate, String pattern) {
|
if (currentDate == null || "".equals(pattern) || pattern == null) {
|
return null;
|
}
|
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
|
return sdf.format(currentDate);
|
}
|
|
/**
|
* @return java.util.List<java.lang.String>
|
* @Author Lin
|
* @Description
|
* @Date 2021/3/10 14:17
|
* @Param []
|
**/
|
public static List<String> getStartDateToEndDate(String startDate, String endDate) {
|
List<String> betweenDays = null;
|
try {
|
betweenDays = PeriodDate.getBetweenDays(startDate, endDate);
|
System.out.println(betweenDays);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return betweenDays;
|
}
|
|
/**
|
* @return int
|
* @Author Lin
|
* @Description 本月天数
|
* @Date 2021/3/10 14:48
|
* @Param [date]
|
**/
|
public static int getDaysOfMonth() {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(new Date());
|
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
}
|
|
|
}
|