/**
* 日期处理工具类
*
* @author weirdo_world
*/
public class TimeUtil {
private final Logger log = LoggerFactory.getLogger(this.getClass());
/**
* 日期:2021-01-01 00:00:00
*/
public static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
/**
* 日期:2021-01-01
*/
public static final String DATE_PATTERN = "yyyy-MM-dd";
/**
* 日期:00:00:00
*/
public static final String TIME_PATTERN = "HH:mm:ss";
/**
* 日期:202105
*/
public static final String YEAR_MONTH_PATTERN = "yyyMM";
/**
* 格式化日期
*
* @param temporal 日期
* @param pattern 格式
* @return 字符串
*/
public static String strFormat(TemporalAccessor temporal, String pattern) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
return dtf.format(temporal);
}
/**
* @return 返回当前日期的字符串
*/
public static String getNowDateStr() {
return strFormat(LocalDateTime.now(), TimeUtil.DEFAULT_PATTERN);
}
/**
* @param pattern 日期格式
* @return 根据指定格式,返回当前日期的字符串
*/
public static String getNowDateStr(String pattern) {
return strFormat(LocalDateTime.now(), pattern);
}
/**
* @param month 月
* @return 返回月前或后的日期
*/
public static String getMonthBeforeOrAfter(int month) {
return strFormat(LocalDateTime.now().minusMonths(month), TimeUtil.DEFAULT_PATTERN);
}
/**
* @param pattern 日期格式
* @return 根据指定格式,返回上月日期的字符串
*/
public static String getMonthBeforeOrAfter(int month, String pattern) {
return strFormat(LocalDateTime.now().minusMonths(month), pattern);
}
/**
* @return 返回当前月的第一天
*/
public static String getFirstDay() {
LocalDateTime ldt = LocalDateTime.now();
return strFormat(LocalDateTime.of(ldt.getYear(), ldt.getMonth(), 1, 0, 0, 0), TimeUtil.DEFAULT_PATTERN);
}
/**
* @param pattern 格式
* @return 根据格式返回当前月的第一天
*/
public static String getFirstDay(String pattern) {
LocalDateTime ldt = LocalDateTime.now();
return strFormat(LocalDateTime.of(ldt.getYear(), ldt.getMonth(), 1, 0, 0, 0), pattern);
}
/**
* @return 返回当前季度开始时间
*/
public static String getQuarterlyStart() {
return strFormat(getFirstQuarterlyMonth(), TimeUtil.DEFAULT_PATTERN);
}
/**
* @param pattern 格式
* @return 根据格式返回当前季度开始时间
*/
public static String getQuarterlyStart(String pattern) {
return strFormat(getFirstQuarterlyMonth(), pattern);
}
/**
* @return 返回当前季度结束时间
*/
public static String getQuarterlyEnd() {
return strFormat(getEndQuarterlyMonth(), TimeUtil.DEFAULT_PATTERN);
}
/**
* @param pattern 格式
* @return 根据格式返回当前季度结束时间
*/
public static String getQuarterlyEnd(String pattern) {
return strFormat(getEndQuarterlyMonth(), pattern);
}
/**
* @return 返回当前季度开始月份
*/
private static LocalDateTime getFirstQuarterlyMonth() {
LocalDateTime ldt = LocalDateTime.now();
int m = ldt.getMonth().getValue();
int month;
if (m <= 3) {
month = 1;
} else if (m <= 6) {
month = 4;
} else if (m <= 9) {
month = 7;
} else {
month = 10;
}
return LocalDateTime.of(ldt.getYear(), month, 1, 0, 0, 0);
}
/**
* @return 返回季度的最后月份
*/
private static LocalDateTime getEndQuarterlyMonth() {
LocalDateTime ldt = LocalDateTime.now();
int m = ldt.getMonth().getValue();
int month;
if (m <= 3) {
month = 3;
} else if (m <= 6) {
month = 6;
} else if (m <= 9) {
month = 9;
} else {
month = 12;
}
return LocalDateTime.of(ldt.getYear(), month, getMonthDays(ldt.getYear(), month), 23, 59, 59);
}
/**
* @param year 年
* @param month 月
* @return 根据年 月 获取月的天数
*/
public static int getMonthDays(int year, int month) {
return LocalDateTime.of(year, month, 1, 0, 0, 0).getMonth().maxLength();
}
}