java 日期工具类
package com.nearfartec.travel.order.utils;
import cn.hutool.json.JSONUtil;
import com.nearfartec.framework.web.utils.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtil extends DateUtils {
public final static String YYYY = "yyyy";
public final static String YYYY_MM = "yyyy-MM";
public final static String YYYY_MM_DD = "yyyy-MM-dd";
public final static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public final static String HHMMSS = "HHmmss";
public final static String HH_MM = "HH:mm";
public final static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static final String[] PARSE_PATTERNS = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
public static String getSpecifiedDayBefore(final String specifiedDay) {
final Calendar c = Calendar.getInstance();
String result = null;
if (StringUtils.isNotBlank(specifiedDay)) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
} catch (final ParseException e) {
e.printStackTrace();
}
assert date != null;
c.setTime(date);
final int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - 1);
result = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
return result;
}
public static String getSpecifiedDayAfter(final String specifiedDay) {
final Calendar c = Calendar.getInstance();
String result = null;
if (StringUtils.isNotBlank(specifiedDay)) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
} catch (final ParseException e) {
e.printStackTrace();
}
assert date != null;
c.setTime(date);
final int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
result = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
return result;
}
public static Date getSpecifiedDayAfter(final Date specifiedDay) {
final Calendar c = Calendar.getInstance();
Date result = null;
if (Objects.nonNull(specifiedDay)) {
c.setTime(specifiedDay);
final int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
result = c.getTime();
}
return result;
}
public static List<String> getBetweenDateList(final String startDateStr, final String endDateStr) {
final List<String> dateList = new ArrayList<>();
if (StringUtils.isNotBlank(startDateStr) && StringUtils.isNotBlank(endDateStr)) {
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.YYYY_MM_DD);
try {
final Date startDate = simpleDateFormat.parse(startDateStr);
final Date endDate = simpleDateFormat.parse(endDateStr);
final long time = (endDate.getTime() - startDate.getTime()) / 1000 / 3600 / 24;
for (int i = 0; i <= time; i++) {
final Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.add(Calendar.DAY_OF_MONTH, i);
final String value = simpleDateFormat.format(calendar.getTime());
dateList.add(value);
}
} catch (final ParseException e) {
e.printStackTrace();
}
}
return dateList;
}
public static String format(Date date) {
return format(date, "yyyy-MM-dd");
}
public static String format(Date date, String formater) {
SimpleDateFormat sdf = new SimpleDateFormat(formater);
return sdf.format(date);
}
public static String getWeekOfDate(String date) {
String res = null;
try {
Date parseDate = DateUtils.parseDate(date, DateUtil.YYYY_MM_DD);
String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
Calendar cal = Calendar.getInstance();
cal.setTime(parseDate);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0) {
w = 0;
}
res = weekDays[w];
} catch (ParseException e) {
e.printStackTrace();
}
return res;
}
public static boolean isBeforeDate(String date, String compareDate) {
boolean result = false;
if (StringUtils.isNotBlank(date) && StringUtils.isNotBlank(compareDate)) {
try {
Date parseDate = DateUtil.parseDate(date, YYYY_MM_DD);
Date parseCompareDate = DateUtil.parseDate(compareDate, YYYY_MM_DD);
result = parseCompareDate.before(parseDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
return result;
}
public static boolean isAfterDate(String date, String compareDate) {
boolean result = false;
if (StringUtils.isNotBlank(date) && StringUtils.isNotBlank(compareDate)) {
try {
Date parseDate = DateUtil.parseDate(date, YYYY_MM_DD);
Date parseCompareDate = DateUtil.parseDate(compareDate, YYYY_MM_DD);
result = parseCompareDate.after(parseDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
return result;
}
public static String addDate(String date, int day) {
String result = null;
if (StringUtils.isNotBlank(date)) {
try {
Date parseDate = DateUtil.parseDate(date, YYYY_MM_DD);
Date resDay = DateUtils.addDays(parseDate, day);
result = DateUtil.format(resDay);
} catch (ParseException e) {
e.printStackTrace();
}
}
return result;
}
public static int daysDiff(String endDateStr, String startDateStr) {
int a = 0;
try {
Date endDate = DateUtils.parseDate(endDateStr, DateUtil.YYYY_MM_DD);
Date startDate = DateUtils.parseDate(startDateStr, DateUtil.YYYY_MM_DD);
a = (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24));
} catch (ParseException e) {
e.printStackTrace();
}
return a;
}
public static boolean isToday(Date date) {
Date now = new Date();
String nowDay = format(now);
String day = format(date);
return day.equals(nowDay);
}
public static boolean isEffectiveDateTime(Date nowTime, Date startTime, Date endTime) {
if (nowTime.getTime() == startTime.getTime()
|| nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}
public static boolean isBeforeDateTime(Date nowTime, Date endTime) {
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.before(end)) {
return true;
} else {
return false;
}
}
public static void main(final String[] args) {
try {
boolean effectiveDateTime = isBeforeDateTime(DateUtil.parseDate(format(new Date(), HH_MM), HH_MM), DateUtil.parseDate("15:00", HH_MM));
System.out.println(effectiveDateTime);
} catch (ParseException e) {
e.printStackTrace();
}
List<String> betweenDateList = getBetweenDateList("2021-02-20", "2021-02-20");
System.out.println(JSONUtil.toJsonStr(betweenDateList));
String startDate = "2021-11-21";
String endDate = "2022-01-01";
System.out.println(daysDiff(endDate, startDate));
System.out.println(getWeekOfDate(startDate));
System.out.println(getWeekOfDate(endDate));
}
}