定时任务
常用cron表达式例子
(1)0/2 * * * * ? 表示每2秒 执行任务
(1)0 0/2 * * * ? 表示每2分钟 执行任务
(1)0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务
(2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
(3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
(4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
(5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
(6)0 0 12 ? * WED 表示每个星期三中午12点
(7)0 0 12 * * ? 每天中午12点触发
(8)0 15 10 ? * * 每天上午10:15触发
(9)0 15 10 * * ? 每天上午10:15触发
(10)0 15 10 * * ? 每天上午10:15触发
(11)0 15 10 * * ? 2005 2005年的每天上午10:15触发
(12)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
(13)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
(14)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
(15)0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
(16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
(17)0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
(18)0 15 10 15 * ? 每月15日上午10:15触发
(19)0 15 10 L * ? 每月最后一日的上午10:15触发
(20)0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
(21)0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
(22)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
postman 请求获取定时任务最近十次执行时间
代码请求获取定时任务最近十次执行时间
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("CronExpression","0 0 0 * * ?")
.build();
Request request = new Request.Builder()
.url("https://api.qqe2.com/cron")
.method("POST", body)
.build();
Response response = client.newCall(request).execute();
日期时间格式
public class DatePattern {
public static final Pattern REGEX_NORM = Pattern.compile("\\d{4}-\\d{1,2}-\\d{1,2}(\\s\\d{1,2}:\\d{1,2}(:\\d{1,2})?)?(.\\d{1,3})?");
public static final String NORM_MONTH_PATTERN = "yyyy-MM";
public static final FastDateFormat NORM_MONTH_FORMAT = FastDateFormat.getInstance("yyyy-MM");
public static final DateTimeFormatter NORM_MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM");
public static final String SIMPLE_MONTH_PATTERN = "yyyyMM";
public static final FastDateFormat SIMPLE_MONTH_FORMAT = FastDateFormat.getInstance("yyyyMM");
public static final DateTimeFormatter SIMPLE_MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMM");
public static final String NORM_DATE_PATTERN = "yyyy-MM-dd";
public static final FastDateFormat NORM_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd");
public static final DateTimeFormatter NORM_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static final String NORM_TIME_PATTERN = "HH:mm:ss";
public static final FastDateFormat NORM_TIME_FORMAT = FastDateFormat.getInstance("HH:mm:ss");
public static final DateTimeFormatter NORM_TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
public static final String NORM_DATETIME_MINUTE_PATTERN = "yyyy-MM-dd HH:mm";
public static final FastDateFormat NORM_DATETIME_MINUTE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm");
public static final DateTimeFormatter NORM_DATETIME_MINUTE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
public static final String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final FastDateFormat NORM_DATETIME_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
public static final DateTimeFormatter NORM_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static final String NORM_DATETIME_MS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
public static final FastDateFormat NORM_DATETIME_MS_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSS");
public static final DateTimeFormatter NORM_DATETIME_MS_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
public static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";
public static final FastDateFormat ISO8601_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss,SSS");
public static final DateTimeFormatter ISO8601_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss,SSS");
public static final String CHINESE_DATE_PATTERN = "yyyy年MM月dd日";
public static final FastDateFormat CHINESE_DATE_FORMAT = FastDateFormat.getInstance("yyyy年MM月dd日");
public static final DateTimeFormatter CHINESE_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss,SSS");
public static final String CHINESE_DATE_TIME_PATTERN = "yyyy年MM月dd日HH时mm分ss秒";
public static final FastDateFormat CHINESE_DATE_TIME_FORMAT = FastDateFormat.getInstance("yyyy年MM月dd日HH时mm分ss秒");
public static final DateTimeFormatter CHINESE_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒");
public static final String PURE_DATE_PATTERN = "yyyyMMdd";
public static final FastDateFormat PURE_DATE_FORMAT = FastDateFormat.getInstance("yyyyMMdd");
public static final DateTimeFormatter PURE_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
public static final String PURE_TIME_PATTERN = "HHmmss";
public static final FastDateFormat PURE_TIME_FORMAT = FastDateFormat.getInstance("HHmmss");
public static final DateTimeFormatter PURE_TIME_FORMATTER = DateTimeFormatter.ofPattern("HHmmss");
public static final String PURE_DATETIME_PATTERN = "yyyyMMddHHmmss";
public static final FastDateFormat PURE_DATETIME_FORMAT = FastDateFormat.getInstance("yyyyMMddHHmmss");
public static final DateTimeFormatter PURE_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
public static final String PURE_DATETIME_MS_PATTERN = "yyyyMMddHHmmssSSS";
public static final FastDateFormat PURE_DATETIME_MS_FORMAT = FastDateFormat.getInstance("yyyyMMddHHmmssSSS");
public static final DateTimeFormatter PURE_DATETIME_MS_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
public static final String HTTP_DATETIME_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z";
public static final FastDateFormat HTTP_DATETIME_FORMAT;
public static final String JDK_DATETIME_PATTERN = "EEE MMM dd HH:mm:ss zzz yyyy";
public static final FastDateFormat JDK_DATETIME_FORMAT;
public static final String UTC_SIMPLE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
public static final FastDateFormat UTC_SIMPLE_FORMAT;
public static final String UTC_SIMPLE_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS";
public static final FastDateFormat UTC_SIMPLE_MS_FORMAT;
public static final String UTC_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'";
public static final FastDateFormat UTC_FORMAT;
public static final String UTC_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ";
public static final FastDateFormat UTC_WITH_ZONE_OFFSET_FORMAT;
public static final String UTC_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
public static final FastDateFormat UTC_MS_FORMAT;
public static final String UTC_MS_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
public static final FastDateFormat UTC_MS_WITH_ZONE_OFFSET_FORMAT;
public DatePattern() {
}
static {
HTTP_DATETIME_FORMAT = FastDateFormat.getInstance("EEE, dd MMM yyyy HH:mm:ss z", TimeZone.getTimeZone("GMT"), Locale.US);
JDK_DATETIME_FORMAT = FastDateFormat.getInstance("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
UTC_SIMPLE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss", TimeZone.getTimeZone("UTC"));
UTC_SIMPLE_MS_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSS", TimeZone.getTimeZone("UTC"));
UTC_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss'Z'", TimeZone.getTimeZone("UTC"));
UTC_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZ", TimeZone.getTimeZone("UTC"));
UTC_MS_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", TimeZone.getTimeZone("UTC"));
UTC_MS_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZ", TimeZone.getTimeZone("UTC"));
}
}
将字符串格式化成日期,pattern
日期工具1
import cn.hutool.core.date.DateTime;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
public class DateUtil {
/**
* yyyy-MM-dd
*/
public static String formatDate(Date date) {
return formatDate(date, GlobalConstant.DateFormat.DATE_FORMAT);
}
/**
* yyyy-MM-dd HH:mm:ss
*/
public static String formatTime(Date date) {
return formatDate(date, GlobalConstant.DateFormat.DATE_TIME_FORMAT);
}
/**
* 格式化日期
*/
public static String formatDate(Date date, String pattern) {
if (date == null)
return null;
SimpleDateFormat sf = new SimpleDateFormat(pattern);
return sf.format(date);
}
/**
* 获取当前日期的字符串
*
* @param pattern --格式
*/
public static String getCurrentDateStr(String pattern) {
SimpleDateFormat sf = new SimpleDateFormat(pattern);
Date dt = new Date(System.currentTimeMillis());
return sf.format(dt);
}
/**
* 字符串转为日期
*/
public static Date strToDate(String dateStr, String pattern) throws ErrCodeException {
SimpleDateFormat sf = new SimpleDateFormat(pattern);
try {
return sf.parse(dateStr);
} catch (ParseException e) {
log.error(e.getMessage(), e);
throw new ErrCodeException(ErrorCodeEnum.PARAMS_CONVERT_ERROR, StringUtil
.format("字符串{}转为日期格式[{}]失败", dateStr, pattern));
}
}
/**
* yyyy-MM-dd
*/
public static Date strToDate(String dateStr) throws ErrCodeException {
return strToDate(dateStr, GlobalConstant.DateFormat.DATE_FORMAT);
}
/**
* yyyy-MM-dd HH:mm:ss
*/
public static Date strToTime(String dateStr) throws ErrCodeException {
return strToDate(dateStr, GlobalConstant.DateFormat.DATE_TIME_FORMAT);
}
/**
* 判断是否合法的日期
*/
public static boolean isLegalDate(int year, int month, int day) {
if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) {
return false;
}
if (month == 2) {
if ((year % 4 != 0) && day > 28) {
return false;
}
if (year % 4 == 0) {
if (year % 100 == 0 && year % 400 != 0) {
if (day > 28)
return false;
} else if (day > 29) {
return false;
}
}
}
return true;
}
/**
* 判断是否合法的日期
*/
public static boolean isLegalDate(Date date) {
String dateFormat = DateUtil.formatDate(date);
String[] dateArr = dateFormat.split("-");
int year = Integer.parseInt(dateArr[0]);
int month = Integer.parseInt(dateArr[1]);
int day = Integer.parseInt(dateArr[2]);
return isLegalDate(year, month, day);
}
public static boolean isLeapYear(Date date) {
int year = getYear(date);
return (new GregorianCalendar()).isLeapYear(year);
}
public static int getYear(Date date) {
String dateFormat = DateUtil.formatDate(date);
String[] dateArr = dateFormat.split("-");
return Integer.parseInt(dateArr[0]);
}
public static int getMonth(Date date) {
String dateFormat = DateUtil.formatDate(date);
String[] dateArr = dateFormat.split("-");
return Integer.parseInt(dateArr[1]);
}
public static int getDay(Date date) {
String dateFormat = DateUtil.formatDate(date);
String[] dateArr = dateFormat.split("-");
return Integer.parseInt(dateArr[2]);
}
/**
* 獲取兩個日期間有多個2月29日
*
* @param start
* @param end
* @return
*/
public static int leapTimes(Date start, Date end) {
List<Integer> year = new ArrayList<>();
int yearStart = getYear(start);
int yearEnd = getYear(end);
int yearGap = yearEnd - yearStart;
year.add(yearStart);
if (yearGap > 0) {
for (int i = 1; i < yearGap; i++) {
int temp = yearStart + i;
year.add(temp);
}
}
int leapDays = 0;
if (cn.hutool.core.date.DateUtil.isLeapYear(yearStart) &&
start.compareTo(getSpecialDate(yearStart)) < 1 &&
end.compareTo(getSpecialDate(yearStart)) > -1) {
leapDays = leapDays + 1;
year = year.subList(1, year.size());
}
leapDays = leapDays + getLeapYears(year);
if (isLeapYear(yearEnd) && end.compareTo(getSpecialDate(yearEnd)) < 1) {
leapDays = leapDays - 1;
}
return leapDays;
}
/**
* 計算年份間有多少個閏年
* @param years
* @return
*/
private static int getLeapYears(List<Integer> years) {
int[] ret = new int[]{0};
years.forEach(y -> {
if (cn.hutool.core.date.DateUtil.isLeapYear(y))
ret[0] = ret[0] + 1;
});
return ret[0];
}
/**
* 計算年份間有多少個閏年
* @param start
* @param end
* @return
*/
private static int getLeapYears(int start, int end) {
if (start < end) {
int temp = start;
start = end;
end = temp;
}
List<Integer> years = new ArrayList<>();
int yearGap = end - start;
years.add(start);
if (yearGap > 0) {
for (int i = 1; i < yearGap; i++) {
int temp = start + i;
years.add(temp);
}
}
return getLeapYears(years);
}
private static Date getSpecialDate(int year) {
String specialDate = (year) + "0228";
return new DateTime(specialDate);
}
/**
* 判斷年份是否是閏年
* @param year
* @return
*/
private static boolean isLeapYear(int year) {
return (new GregorianCalendar()).isLeapYear(year);
}
/**
* 日期转换- String -> Date
*
* @param dateString 字符串时间
* @return Date类型信息
* @throws Exception 抛出异常
*/
public static Date parseString2Date(String dateString) throws Exception {
if (dateString == null) {
return null;
}
return parseString2Date(dateString, "yyyy-MM-dd");
}
/**
* 日期转换- String -> Date
*
* @param dateString 字符串时间
* @param pattern 格式模板
* @return Date类型信息
* @throws Exception 抛出异常
*/
public static Date parseString2Date(String dateString, String pattern) throws Exception {
if (dateString == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = sdf.parse(dateString);
return date;
}
/**
* 日期转换 Date -> String
*
* @param date Date类型信息
* @return 字符串时间
* @throws Exception 抛出异常
*/
public static String parseDate2String(Date date) throws Exception {
if (date == null) {
return null;
}
return parseDate2String(date, "yyyy-MM-dd");
}
/**
* 日期转换 Date -> String
*
* @param date Date类型信息
* @param pattern 格式模板
* @return 字符串时间
* @throws Exception 抛出异常
*/
public static String parseDate2String(Date date, String pattern) throws Exception {
if (date == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String strDate = sdf.format(date);
return strDate;
}
/**
* 获取当前日期的本周一是几号
*
* @return 本周一的日期
*/
public static Date getThisWeekMonday() {
Calendar cal = Calendar.getInstance();
cal.setTime(new 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();
}
/**
* 获取当前日期周的最后一天
*
* @return 当前日期周的最后一天
*/
public static Date getSundayOfThisWeek() {
Calendar c = Calendar.getInstance();
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
if (dayOfWeek == 0) {
dayOfWeek = 7;
}
c.add(Calendar.DATE, -dayOfWeek + 7);
return c.getTime();
}
/**
* 根据日期区间获取月份列表
*
* @param minDate 开始时间
* @param maxDate 结束时间
* @return 月份列表
* @throws Exception
*/
public static List<String> getMonthBetween(String minDate, String maxDate, String format) throws Exception {
ArrayList<String> result = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
SimpleDateFormat sdf2 = new SimpleDateFormat(format);
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf2.format(curr.getTime()));
curr.add(Calendar.MONTH, 1);
}
return result;
}
/**
* 根据日期获取年度中的周索引
*
* @param date 日期
* @return 周索引
* @throws Exception
*/
public static Integer getWeekOfYear(String date) throws Exception {
Date useDate = parseString2Date(date);
Calendar cal = Calendar.getInstance();
cal.setTime(useDate);
return cal.get(Calendar.WEEK_OF_YEAR);
}
/**
* 根据年份获取年中周列表
*
* @param year 年分
* @return 周列表
* @throws Exception
*/
public static Map<Integer, String> getWeeksOfYear(String year) throws Exception {
Date useDate = parseString2Date(year, "yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(useDate);
//获取年中周数量
int weeksCount = cal.getWeeksInWeekYear();
Map<Integer, String> mapWeeks = new HashMap<>(55);
for (int i = 0; i < weeksCount; i++) {
cal.get(Calendar.DAY_OF_YEAR);
mapWeeks.put(i + 1, parseDate2String(getFirstDayOfWeek(cal.get(Calendar.YEAR), i)));
}
return mapWeeks;
}
/**
* 获取某年的第几周的开始日期
*
* @param year 年分
* @param week 周索引
* @return 开始日期
* @throws Exception
*/
public static Date getFirstDayOfWeek(int year, int week) throws Exception {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, week * 7);
return getFirstDayOfWeek(cal.getTime());
}
/**
* 获取某年的第几周的结束日期
*
* @param year 年份
* @param week 周索引
* @return 结束日期
* @throws Exception
*/
public static Date getLastDayOfWeek(int year, int week) throws Exception {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, week * 7);
return getLastDayOfWeek(cal.getTime());
}
/**
* 获取当前时间所在周的开始日期
*
* @param date 当前时间
* @return 开始时间
*/
public static Date getFirstDayOfWeek(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.SUNDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
return c.getTime();
}
/**
* 获取当前时间所在周的结束日期
*
* @param date 当前时间
* @return 结束日期
*/
public static Date getLastDayOfWeek(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.SUNDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
return c.getTime();
}
//获得上周一的日期
public static Date geLastWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(date));
cal.add(Calendar.DATE, -7);
return cal.getTime();
}
//获得本周一的日期
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();
}
//获得下周一的日期
public static Date getNextWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(date));
cal.add(Calendar.DATE, 7);
return cal.getTime();
}
//获得今天日期
public static Date getToday() {
return new Date();
}
//获得本月一日的日期
public static Date getFirstDay4ThisMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
/**
* 比較日期大小,
* 1、同一日期,返回0; 2、 before日期早於after,返回 -1,否則返回1;
*
* @param before
* @param after
* @return
*/
public static int compareTo(Date before, Date after) {
return before.compareTo(after);
}
public static void main(String[] args) {
try {
System.out.println("本周一" + parseDate2String(getThisWeekMonday()));
System.out.println("本月一日" + parseDate2String(getFirstDay4ThisMonth()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
日期工具2(比大小)、当日日期
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.text.SimpleDateFormat;
import java.util.Date;
import static cn.hutool.core.date.DatePattern.PURE_DATE_PATTERN;
@Component
@Slf4j
public class DateUtils {
public Date today;
/**
* 校驗證件時間有效情況
*
* @param start
* @param end
* @param date
* @return
*/
public static boolean checkTpOrFeValid(Date start, Date end, Date date) {
// 簽發日期與指定日期
if (cn.hutool.core.date.DateUtil.compare(start, date) > -1) {
return false;
}
if (cn.hutool.core.date.DateUtil.compare(date, end) > -1) {
return false;
}
// 簽發日期與截止日期跨度是否超過兩年
if (DateUtil.betweenDay(start, end, true) > (730 + DateUtil.leapTimes(start, end))) {
return false;
}
return true;
}
// 校驗有效期,與當前日期相比
public static boolean checkDuration2CurrentValid(Date end) {
// 簽發日期與指定日期
Date date = new Date();
return DateUtil.compare(end, date) <= -1;
}
// 日期與指定日期相比
public static boolean checkDuration2AppointDateValid(Date start, Date appointDate) {
return DateUtil.compare(start, appointDate) <= -1;
}
// 校驗日期是否早於當前日期
public static boolean isBeforeToday(Date date) {
Date today = new Date();
return DateUtil.compare(date, today) <= -1;
}
// 校驗日期是否晚於當前日期
public static boolean isAfterToday(Date date) {
Date today = new Date();
return DateUtil.compare(today, date) <= -1;
}
@PostConstruct
@Scheduled(cron = "0 0 0 * * ?")
public void todayInit() {
Date date = new Date();
this.today = date;
log.info("===> 定時任務結束,今日是{}", DateUtil.format(date,"yyyyMMdd"));
}
/**
* 格式化日期,今日,僅支持年月日格式,today是定时任务维护的
*/
public String formatDate4Today(String pattern) {
SimpleDateFormat sf = new SimpleDateFormat(pattern);
return sf.format(this.today);
}
/**
* 格式化日期
*/
public String formatDate4Now(String pattern) {
Date now = new Date();
SimpleDateFormat sf = new SimpleDateFormat(pattern);
return sf.format(now);
}
}
Oracle:ORA-01810:格式代码出现两次 日期格式、时间格式、to_date错误
原因:sql语句中,格式化出现了两次mm, 月份 mm 分钟 mm
月份 mm 分钟 mm
select * from tb_user user0_ where to_date(user0_.permit_end, 'YYYY-MM-DD HH:mm:ss') > to_date('2022-08-17', 'YYYY-MM-DD HH:mm:ss')
改成如下即可select * from tb_user user0_ where to_date(user0_.permit_end, 'YYYY-MM-DD HH:mi:ss') > to_date('2022-08-17', 'YYYY-MM-DD HH:mi:ss')
stream收集String类型转Long类型
List<String> list = Arrays.asList("5", "4", "3", "2", "7", "1", "6", "0", "8");
//方式一:转换
List<Long> newList1 = list.stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
//方式二:处理返回LongStream;LongStream.boxed 将 LongStream 转换为 Stream<Long> ,然后您可以收集到列表中
List<Long> newList2 = list.stream().mapToLong(t -> Long.parseLong(t.trim())).boxed().collect(Collectors.toList());
JPA查询距今恰好3个月的数据
private static Specification<User> getUserSpecification() {
Calendar start = Calendar.getInstance();
start.add(Calendar.MONTH, -3);
start.set(Calendar.HOUR_OF_DAY, 0);
start.set(Calendar.MINUTE, 0);
start.set(Calendar.SECOND, 0);
start.set(Calendar.MILLISECOND, 0);
Calendar end = Calendar.getInstance();
end.add(Calendar.MONTH, -3);
end.set(Calendar.HOUR_OF_DAY, 23);
end.set(Calendar.MINUTE, 59);
end.set(Calendar.SECOND, 59);
end.set(Calendar.MILLISECOND, 59);
return (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.greaterThan(root.get("permitEnd").as(Date.class), start.getTime()));
predicates.add(cb.lessThan(root.get("permitEnd").as(Date.class), end.getTime()));
Predicate[] p = new Predicate[predicates.size()];
return cb.and(predicates.toArray(p));
};
}
JPA-Specificatio取时间段范围类的数据
(DateUtil 来自hutool工具类,Constants.DATE_FORMAT 指定日期格式化形式即可)
Specification<Class> specification = (Specification<Class>) (root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
// 所有的断言
if(StringUtils.isNotEmpty(req.getStartTime())&&StringUtils.isNotEmpty(req.getEndTime())){
Date startTime=DateUtil.parse(req.getStartTime() + " 00:00:00", Constants.DATE_FORMAT);
Date endTime=DateUtil.parse(req.getEndTime() + " 23:59:59", Constants.DATE_FORMAT);
list.add(cb.between(root.get("submitDate"), startTime, endTime));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
};
日历加3个月