这是一个比较全面的时间工具类,可供参考!
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.ImmutableMap;
import com.springboot.cloud.msp.common.core.model.DateStyle;
import com.springboot.cloud.msp.common.core.util.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
/**
* 日期工具类
*
* @author [chen.hao78]
* @version [1.0, 2022/10/27]
*/
@Slf4j
public class DateUtil {
/**
* 判断指定日期属于本年的第几周
*
* @throws [异常类型] [异常说明]
* @param: date
* @return: int
*/
public static String weekOfYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
calendar.setTime(date);
int i = calendar.get(Calendar.WEEK_OF_YEAR);
DecimalFormat df = new DecimalFormat("00");
String str = df.format(i);
return str;
}
/**
* 〈返回指定日期所处周的起始日(周日为起始日)〉
* @param: date
* @return: java.util.Date
* @throws [异常类型] [异常说明]
*/
public static Date beginOfWeek(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Calendar calendar1 = cn.hutool.core.date.DateUtil.beginOfWeek(calendar, false);
String format = cn.hutool.core.date.DateUtil.format(calendar1.getTime(), "yyyy-MM-dd");
DateTime dateTime = cn.hutool.core.date.DateUtil.parseDate(format);
return dateTime;
}
/**
* 〈指定日期对应当周最后一天日期〉
* @param: date
* @param: isSundayAsLastDay
* @return: java.util.Date
* @throws [异常类型] [异常说明]
*/
public static Date endOfWeek(Date date, boolean isSundayAsLastDay){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Calendar calendar1 = cn.hutool.core.date.DateUtil.endOfWeek(calendar, isSundayAsLastDay);
return calendar1.getTime();
}
/**
* 〈获取指定周数之内的日期范围〉
* @param: weeks
* @return: java.util.Map<java.lang.String,java.lang.String>
* @throws [异常类型] [异常说明]
*/
public static Map<String, String> getTimeRegionForWeek(Integer weeks) {
Date date = new Date();
// 当前周
String minWeek = DateUtil.weekOfYear(date);
// 当前年份
int minYear = cn.hutool.core.date.DateUtil.year(date);
// 当前年周
String minYearWeek = minYear + minWeek;
log.debug("minYearWeek==" + minYearWeek);
// 本周最后一天(周六)偏移weeks周的日期
DateTime maxWeekDate = cn.hutool.core.date.DateUtil.offsetWeek(DateUtil.endOfWeek(date, false), weeks);
String maxWeek = DateUtil.weekOfYear(maxWeekDate);
int maxYear = cn.hutool.core.date.DateUtil.year(maxWeekDate);
String maxYearWeek = maxYear + maxWeek;
log.debug("maxYearWeek==" + maxYearWeek);
// 当前日期
String minDay = cn.hutool.core.date.DateUtil.today();
log.debug("minDay===" + minDay);
// 当前日期加上生产周数后的那一周的最后一天日期
Calendar maxWeekDateCal = cn.hutool.core.date.DateUtil.calendar(maxWeekDate);
Date time = cn.hutool.core.date.DateUtil.endOfWeek(maxWeekDateCal, false).getTime();
String maxDay = cn.hutool.core.date.DateUtil.format(time, "yyyy-MM-dd");
log.debug("maxDay=" + maxDay);
return ImmutableMap.of("minYearWeek", minYearWeek, "maxYearWeek", maxYearWeek, "minDay", minDay, "maxDay", maxDay);
}
public static int compare(Date date1, Date date2){
String date1Str = cn.hutool.core.date.DateUtil.format(date1, DatePattern.PURE_DATE_PATTERN);
String date2Str = cn.hutool.core.date.DateUtil.format(date2, DatePattern.PURE_DATE_PATTERN);
Date newDate1 = DateUtil.parse(date1Str, DatePattern.PURE_DATE_PATTERN);
Date newDate2 = DateUtil.parse(date2Str, DatePattern.PURE_DATE_PATTERN);
return cn.hutool.core.date.DateUtil.compare(newDate1, newDate2);
}
public static Boolean isHistory(String dateStr) {
Date date = DateUtil.parse(dateStr, DatePattern.PURE_DATE_PATTERN);
Date today = new Date();
return compare(date, today) < 0;
}
/**
* 日期格式
*/
public static final String YYYY_MM_DD = "yyyy-MM-dd";
/**
* 日期格式
*/
public static final String YYYYMMDD = "yyyyMMdd";
/**
* 日期格式
*/
public static final String YYYY_MM_DD_HH_MM_SS = YYYY_MM_DD + " HH:mm:ss";
/**
* 获取SimpleDateFormat
*
* @param parttern 日期格式
* @return SimpleDateFormat对象
* @throws RuntimeException 异常:非法日期格式
*/
public static SimpleDateFormat getDateFormat(String parttern) throws RuntimeException {
return new SimpleDateFormat(parttern);
}
/**
* 获取日期中的某数值。如获取月份
*
* @param date 日期
* @param dateType 日期格式
* @return 数值
*/
public static int getInteger(Date date, int dateType) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(dateType);
}
/**
* 增加日期中某类型的某数值。如增加日期
*
* @param date 日期字符串
* @param dateType 类型
* @param amount 数值
* @return 计算后日期字符串
*/
public static String addInteger(String date, int dateType, int amount) {
String dateString = null;
DateStyle dateStyle = getDateStyle(date);
if (dateStyle != null) {
Date myDate = stringToDate(date, dateStyle);
myDate = addInteger(myDate, dateType, amount);
dateString = dateToString(myDate, dateStyle);
}
return dateString;
}
/**
* 增加日期中某类型的某数值。如增加日期
*
* @param date 日期
* @param dateType 类型
* @param amount 数值
* @return 计算后日期
*/
public static Date addInteger(Date date, int dateType, int amount) {
Date myDate = null;
if (date != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateType, amount);
myDate = calendar.getTime();
}
return myDate;
}
/**
* 获取精确的日期
*
* @param timestamps 时间long集合
* @return 日期
*/
public static Date getAccurateDate(List<Long> timestamps) {
Date date = null;
long timestamp = 0;
Map<Long, long[]> map = new HashMap<Long, long[]>(512);
List<Long> absoluteValues = new ArrayList<Long>();
if (timestamps != null && timestamps.size() > 0) {
if (timestamps.size() > 1) {
for (int i = 0; i < timestamps.size(); i++) {
for (int j = i + 1; j < timestamps.size(); j++) {
long absoluteValue = Math.abs(timestamps.get(i) - timestamps.get(j));
absoluteValues.add(absoluteValue);
long[] timestampTmp = {timestamps.get(i), timestamps.get(j)};
map.put(absoluteValue, timestampTmp);
}
}
long minAbsoluteValue = -1;
if (!absoluteValues.isEmpty()) {
minAbsoluteValue = absoluteValues.get(0);
}
for (int i = 0; i < absoluteValues.size(); i++) {
for (int j = i + 1; j < absoluteValues.size(); j++) {
if (absoluteValues.get(i) > absoluteValues.get(j)) {
minAbsoluteValue = absoluteValues.get(j);
} else {
minAbsoluteValue = absoluteValues.get(i);
}
}
}
if (minAbsoluteValue != -1) {
long[] timestampsLastTmp = map.get(minAbsoluteValue);
if (absoluteValues.size() > 1) {
timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]);
} else if (absoluteValues.size() == 1) {
long dateOne = timestampsLastTmp[0];
long dateTwo = timestampsLastTmp[1];
long max = 100000000000L;
if ((Math.abs(dateOne - dateTwo)) < max) {
timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]);
} else {
long now = System.currentTimeMillis();
if (Math.abs(dateOne - now) <= Math.abs(dateTwo - now)) {
timestamp = dateOne;
} else {
timestamp = dateTwo;
}
}
}
}
} else {
timestamp = timestamps.get(0);
}
}
if (timestamp != 0) {
date = new Date(timestamp);
}
return date;
}
/**
* 判断字符串是否为日期字符串
*
* @param date 日期字符串
* @return true or false
*/
public static boolean isDate(String date) {
boolean isDate = false;
if (date != null) {
if (stringToDate(date) != null) {
isDate = true;
}
}
return isDate;
}
/**
* 获取日期字符串的日期风格。失敗返回null。
*
* @param date 日期字符串
* @return 日期风格
*/
public static DateStyle getDateStyle(String date) {
DateStyle dateStyle = null;
Map<Long, DateStyle> map = new HashMap<Long, DateStyle>(512);
List<Long> timestamps = new ArrayList<Long>();
for (DateStyle style : DateStyle.values()) {
Date dateTmp = stringToDate(date, style.getValue());
if (dateTmp != null) {
timestamps.add(dateTmp.getTime());
map.put(dateTmp.getTime(), style);
}
}
dateStyle = map.get(getAccurateDate(timestamps).getTime());
return dateStyle;
}
/**
* 将日期字符串转化为日期。失败返回null。
*
* @param date 日期字符串
* @return 日期
*/
public static Date stringToDate(String date) {
DateStyle dateStyle = null;
return stringToDate(date, dateStyle);
}
/**
* 将日期字符串转化为日期。失败返回null。
*
* @param date 日期字符串
* @param parttern 日期格式
* @return 日期
*/
public static Date stringToDate(String date, String parttern) {
Date myDate = null;
if (date != null) {
try {
myDate = getDateFormat(parttern).parse(date);
} catch (Exception e) {
}
}
return myDate;
}
/**
* 将日期字符串转化为日期。失败返回null。
*
* @param date 日期字符串
* @param dateStyle 日期风格
* @return 日期
*/
public static Date stringToDate(String date, DateStyle dateStyle) {
Date myDate = null;
if (dateStyle == null) {
List<Long> timestamps = new ArrayList<Long>();
for (DateStyle style : DateStyle.values()) {
Date dateTmp = stringToDate(date, style.getValue());
if (dateTmp != null) {
timestamps.add(dateTmp.getTime());
}
}
myDate = getAccurateDate(timestamps);
} else {
myDate = stringToDate(date, dateStyle.getValue());
}
return myDate;
}
/**
* 将日期转化为日期字符串。失败返回null。
*
* @param date 日期
* @param parttern 日期格式
* @return 日期字符串
*/
public static String dateToString(Date date, String parttern) {
String dateString = null;
if (date != null) {
try {
dateString = getDateFormat(parttern).format(date);
} catch (Exception e) {
}
}
return dateString;
}
/**
* 将日期转化为日期字符串。失败返回null。
*
* @param date 日期
* @param dateStyle 日期风格
* @return 日期字符串
*/
public static String dateToString(Date date, DateStyle dateStyle) {
String dateString = null;
if (dateStyle != null) {
dateString = dateToString(date, dateStyle.getValue());
}
return dateString;
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
*
* @param date 旧日期字符串
* @param parttern 新日期格式
* @return 新日期字符串
*/
public static String stringToString(String date, String parttern) {
return stringToString(date, null, parttern);
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
*
* @param date 旧日期字符串
* @param dateStyle 新日期风格
* @return 新日期字符串
*/
public static String stringToString(String date, DateStyle dateStyle) {
return stringToString(date, null, dateStyle);
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
*
* @param date 旧日期字符串
* @param olddParttern 旧日期格式
* @param newParttern 新日期格式
* @return 新日期字符串
*/
public static String stringToString(String date, String olddParttern, String newParttern) {
String dateString = null;
if (olddParttern == null) {
DateStyle style = getDateStyle(date);
if (style != null) {
Date myDate = stringToDate(date, style.getValue());
dateString = dateToString(myDate, newParttern);
}
} else {
Date myDate = stringToDate(date, olddParttern);
dateString = dateToString(myDate, newParttern);
}
return dateString;
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
*
* @param date 旧日期字符串
* @param olddDteStyle 旧日期风格
* @param newDateStyle 新日期风格
* @return 新日期字符串
*/
public static String stringToString(String date, DateStyle olddDteStyle, DateStyle newDateStyle) {
String dateString = null;
if (olddDteStyle == null) {
DateStyle style = getDateStyle(date);
dateString = stringToString(date, style.getValue(), newDateStyle.getValue());
} else {
dateString = stringToString(date, olddDteStyle.getValue(), newDateStyle.getValue());
}
return dateString;
}
/**
* 增加日期的年份。失败返回null。
*
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加年份后的日期字符串
*/
public static String addYear(String date, int yearAmount) {
return addInteger(date, Calendar.YEAR, yearAmount);
}
/**
* 增加日期的年份。失败返回null。
*
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加年份后的日期
*/
public static Date addYear(Date date, int yearAmount) {
return addInteger(date, Calendar.YEAR, yearAmount);
}
/**
* 增加日期的月份。失败返回null。
*
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加月份后的日期字符串
*/
public static String addMonth(String date, int yearAmount) {
return addInteger(date, Calendar.MONTH, yearAmount);
}
/**
* 增加日期的月份。失败返回null。
*
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加月份后的日期
*/
public static Date addMonth(Date date, int yearAmount) {
return addInteger(date, Calendar.MONTH, yearAmount);
}
/**
* 增加日期的天数。失败返回null。
*
* @param date 日期字符串
* @param dayAmount 增加数量。可为负数
* @return 增加天数后的日期字符串
*/
public static String addDay(String date, int dayAmount) {
return addInteger(date, Calendar.DATE, dayAmount);
}
/**
* 增加日期的天数。失败返回null。
*
* @param date 日期
* @param dayAmount 增加数量。可为负数
* @return 增加天数后的日期
*/
public static Date addDay(Date date, int dayAmount) {
return addInteger(date, Calendar.DATE, dayAmount);
}
/**
* 增加日期的小时。失败返回null。
*
* @param date 日期字符串 dayAmount 增加数量。可为负数
* @return 增加小时后的日期字符串
*/
public static String addHour(String date, int hourAmount) {
return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);
}
/**
* 增加日期的小时。失败返回null。
*
* @param date 日期 dayAmount 增加数量。可为负数
* @return 增加小时后的日期
*/
public static Date addHour(Date date, int hourAmount) {
return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);
}
/**
* 增加日期的分钟。失败返回null。
*
* @param date 日期字符串 dayAmount 增加数量。可为负数
* @return 增加分钟后的日期字符串
*/
public static String addMinute(String date, int hourAmount) {
return addInteger(date, Calendar.MINUTE, hourAmount);
}
/**
* 增加日期的分钟。失败返回null。
*
* @param date 日期 dayAmount 增加数量。可为负数
* @return 增加分钟后的日期
*/
public static Date addMinute(Date date, int hourAmount) {
return addInteger(date, Calendar.MINUTE, hourAmount);
}
/**
* 增加日期的秒钟。失败返回null。
*
* @param date 日期字符串 dayAmount 增加数量。可为负数
* @return 增加秒钟后的日期字符串
*/
public static String addSecond(String date, int hourAmount) {
return addInteger(date, Calendar.SECOND, hourAmount);
}
/**
* 增加日期的秒钟。失败返回null。
*
* @param date 日期 dayAmount 增加数量。可为负数
* @return 增加秒钟后的日期
*/
public static Date addSecond(Date date, int hourAmount) {
return addInteger(date, Calendar.SECOND, hourAmount);
}
/**
* 获取日期的年份。失败返回0。
*
* @param date 日期字符串
* @return 年份
*/
public static int getYear(String date) {
return getYear(stringToDate(date));
}
/**
* 获取日期的年份。失败返回0。
*
* @param date 日期
* @return 年份
*/
public static int getYear(Date date) {
return getInteger(date, Calendar.YEAR);
}
/**
* 获取日期的月份。失败返回0。
*
* @param date 日期字符串
* @return 月份
*/
public static int getMonth(String date) {
return getMonth(stringToDate(date));
}
/**
* 获取日期的月份。失败返回0。
*
* @param date 日期
* @return 月份
*/
public static int getMonth(Date date) {
return getInteger(date, Calendar.MONTH);
}
/**
* 获取日期的天数。失败返回0。
*
* @param date 日期字符串
* @return 天
*/
public static int getDay(String date) {
return getDay(stringToDate(date));
}
/**
* 获取日期的天数。失败返回0。
*
* @param date 日期
* @return 天
*/
public static int getDay(Date date) {
return getInteger(date, Calendar.DATE);
}
/**
* 获取日期的小时。失败返回0。
*
* @param date 日期字符串
* @return 小时
*/
public static int getHour(String date) {
return getHour(stringToDate(date));
}
/**
* 获取日期的小时。失败返回0。
*
* @param date 日期
* @return 小时
*/
public static int getHour(Date date) {
return getInteger(date, Calendar.HOUR_OF_DAY);
}
/**
* 获取日期的分钟。失败返回0。
*
* @param date 日期字符串
* @return 分钟
*/
public static int getMinute(String date) {
return getMinute(stringToDate(date));
}
/**
* 获取日期的分钟。失败返回0。
*
* @param date 日期
* @return 分钟
*/
public static int getMinute(Date date) {
return getInteger(date, Calendar.MINUTE);
}
/**
* 获取日期的秒钟。失败返回0。
*
* @param date 日期字符串
* @return 秒钟
*/
public static int getSecond(String date) {
return getSecond(stringToDate(date));
}
/**
* 获取日期的秒钟。失败返回0。
*
* @param date 日期
* @return 秒钟
*/
public static int getSecond(Date date) {
return getInteger(date, Calendar.SECOND);
}
/**
* 获取日期 。默认yyyy-MM-dd格式。失败返回null。
*
* @param date 日期字符串
* @return 日期
*/
public static String getDate(String date) {
return stringToString(date, DateStyle.YYYY_MM_DD);
}
/**
* 获取日期。默认yyyy-MM-dd格式。失败返回null。
*
* @param date 日期
* @return 日期
*/
public static String getDate(Date date) {
return dateToString(date, DateStyle.YYYY_MM_DD);
}
/**
* 获取日期。默认yyyy年MM月dd日格式。失败返回null。
*
* @param date
* @return
*/
public static String getDateFormat(Date date) {
return dateToString(date, DateStyle.YYYY_MM_DD_CC);
}
/**
* 获取日期。默认yyyy-MM-dd HH:mm:ss格式。失败返回null。
*
* @param date 日期
* @return 日期
*/
public static String getDateTime(Date date) {
return dateToString(date, DateStyle.YYYY_MM_DD_HH_MM_SS);
}
/**
* 获取日期。默认mm格式。失败返回null。
*
* @param date 日期
* @return 日期
*/
public static String getMM(Date date) {
return dateToString(date, "MM");
}
/**
* 获取日期。默认yyyyMMdd。
*
* @param date 日期
* @return 日期
*/
public static String getDate1(Date date) {
return dateToString(date, "yyyyMMdd");
}
/**
* 获取往年年份。默认yyyy格式。失败返回null。
*
* @param date
* @param num
* @return
*/
public static Integer getDateYear(Date date, Integer num) {
return Integer.parseInt(dateToString(date, DateStyle.YYYY)) + num;
}
/**
* 获取日期的时间。默认HH:mm:ss格式。失败返回null。
*
* @param date 日期字符串
* @return 时间
*/
public static String getTime(String date) {
return stringToString(date, DateStyle.HH_MM_SS);
}
/**
* 获取日期的时间。默认HH:mm:ss格式。失败返回null。
*
* @param date 日期
* @return 时间
*/
public static String getTime(Date date) {
return dateToString(date, DateStyle.HH_MM_SS);
}
/**
* 获取两个日期相差的天数
*
* @param date 日期字符串
* @param otherDate 另一个日期字符串
* @return 相差天数
*/
public static int getIntervalDays(String date, String otherDate) {
return getIntervalDays(stringToDate(date), stringToDate(otherDate));
}
/**
* @param date 日期
* @param otherDate 另一个日期
* @return 相差天数
*/
public static int getIntervalDays(Date date, Date otherDate) {
date = DateUtil.stringToDate(DateUtil.getDate(date));
long time = Math.abs(date.getTime() - otherDate.getTime());
return (int) (time / (24 * 60 * 60 * 1000));
}
/**
* @param
* @return nameEnShort
*/
public static Date parse(String dateStr) {
return parse(dateStr, YYYY_MM_DD, null);
}
/**
* @param
* @return nameEnShort
*/
public static Date parse(String dateStr, String pattern) {
return parse(dateStr, pattern, null);
}
/**
* @param
* @return nameEnShort
*/
public static Date parse(String dateStr, String pattern, Date defaultValue) {
if (dateStr == null || "".equals(dateStr)) {
return defaultValue;
}
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
return format.parse(dateStr);
} catch (ParseException e) {
return defaultValue;
}
}
/**
* @param
* @return nameEnShort
*/
public static String format(Date date) {
return format(date, YYYY_MM_DD);
}
/**
* @param
* @return nameEnShort
*/
public static String format(Date date, String pattern) {
if (date != null) {
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
} else {
return null;
}
}
/**
* @param
* @return nameEnShort
*/
public static Date addDay1(Date date, int day) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DAY_OF_MONTH, day);
return c.getTime();
}
/**
* @param date
* @return nameEnShort
*/
public static Date addMonth1(Date date, int month) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MONTH, month);
return c.getTime();
}
/**
* 获取昨天的日期
*
* @return Date 返回类型
* @Title getYesterday
*/
public static Date getYesterday() {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1);
date = calendar.getTime();
return date;
}
/**
* 获取昨天的日期
*
* @return Date 返回类型
* @Title getYesterday
*/
public static Date getSevenDaysAgo() {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -7);
date = calendar.getTime();
return date;
}
/**
* 获取n天以前的日期
*
* @param day
* @return
*/
public static Date getDaysAgo(int day) {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1 * day);
date = calendar.getTime();
return date;
}
/**
* 带服务器时区的时间日期
*
* @return
*/
public static Date getLocalDateTime() {
LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
Date date = Date.from(instant);
return date;
}
/**
* @param date1
* @param date2
* @Description: 比较两个时间的大小
* Date: 2020-02-22 10:12:10
*/
public static boolean compareDate(Date date1, Date date2) {
if (date1.before(date2)) {
return false;
} else if (date1.after(date2)) {
return true;
} else {
return true;
}
}
/**
* 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
*
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
public static boolean isEffectiveDate(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;
}
}
/**
* 获得当前日期 yyyy-MM-dd HH:mm:ss
*
* @return 2019-11-19 14:12:40
*/
public static Date getDateCurrentTime(String str) {
// 小写的hh取得12小时,大写的HH取的是24小时
SimpleDateFormat df = new SimpleDateFormat(str);
Date date = new Date();
try {
date = df.parse(df.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static Date getDateTime(String str) {
// 小写的hh取得12小时,大写的HH取的是24小时
SimpleDateFormat df = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
Date date = new Date();
try {
date = df.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 传入格式 yyyyMMdd
* @param date 传入格式 yyyyMMdd
* @return 返回格式yyyy-MM-dd hh:mm:ss
*/
public static String getTimeStamp(String date) {
String y = date.substring(0, 4);
String m = date.substring(4, 6);
String d = date.substring(6, 8);
StringBuffer sf = new StringBuffer();
sf.append(y).append("-").append(m).append("-").append(d).append(" ").append("00:00:00");
long ss = stringToDate(sf.toString()).getTime();
return String.valueOf(ss);
}
/**
* 传入格式 yyyyMMdd
* @param date 传入格式 yyyyMMdd
* @return 返回格式yyyy-MM-dd
*/
public static String getDayStamp(String date) {
String y = date.substring(0, 4);
String m = date.substring(4, 6);
String d = date.substring(6, 8);
StringBuffer sf = new StringBuffer();
sf.append(y).append("-").append(m).append("-").append(d);
return sf.toString();
}
/**
* 日期字符串或时间戳处理,
* yyyy-MM-dd转成yyyyMMdd
* 时间戳数字转换yyyyMMdd
* @param date
* @return 返回 yyyyMMdd
*/
public static String dateStringFormt(String date) {
if (ObjectUtil.isEmpty(date)) {
return "";
}
if (date.indexOf("-") > 0) {
return date.replaceAll("-", "").substring(0, 8);
}
if (StringUtils.isNumeric(date) && date.length() > 8) {
Date date2 = DateUtils.getDate(Long.parseLong(date));
String dataStr = com.springboot.cloud.msp.common.core.util.DateUtil.dateToString(date2, com.springboot.cloud.msp.common.core.util.DateUtil.YYYYMMDD);
// System.out.println(date + "==>日期转换:" + dataStr);
return dataStr;
}
return date;
}
/**
* 时间戳转日期
*
* @param s
* @return
*/
public static Date transForDate(Long s) {
if (s == null) {
s = (long) 0;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date temp = null;
if (s != null) {
try {
String str = sdf.format(s);
temp = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
return temp;
}
/**
* 取得指定日期是多少周
* 最后一周跨年,则将这周算作下一年第一周
*/
public static String getWeekStrOfYear(Date date, int weekFirstDay) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(weekFirstDay);
c.setMinimalDaysInFirstWeek(1);
c.setTime(date);
Calendar c2 = new GregorianCalendar();
c2.setTime(getLastDayOfWeek(c.getTime(), weekFirstDay));
return c2.get(Calendar.YEAR) + StringUtils.leftPad(c.get(Calendar.WEEK_OF_YEAR) + "", 2, "0");
}
/**
* 取得指定日期所在周的最后一天
*
* @param date
* @param weekFirstDay Calendar.MONDAY,Calendar.SUNDAY
* @return
*/
public static Date getLastDayOfWeek(Date date, int weekFirstDay) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(weekFirstDay);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
return c.getTime();
}
/**
* 得到某年某周的最后一天
*
* @param year
* @param week
* @param weekFirstDay Calendar.MONDAY,Calendar.SUNDAY
* @return
*/
public static Date getLastDayOfWeek(int year, int week, int weekFirstDay) {
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 - 1) * 7);
return getLastDayOfWeek(cal.getTime(), weekFirstDay);
}
/**
* 根据日期字符串判断当月第几周
*
* @param str
* @return
* @throws Exception
*/
public static int getWeek(String str) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//第几周
int week = calendar.get(Calendar.WEEK_OF_YEAR);
//第几天,从周日开始
// int day = calendar.get(Calendar.DAY_OF_WEEK);
return week;
}
//时间区间补全方法
public static List<String> findDates(String beginTime, int num)
throws ParseException {
List<String> allDate = new ArrayList();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String endTime = getOtherTime(beginTime+ " 00:00:00", num);
Date dBegin = sdf.parse(beginTime);
Date dEnd = sdf.parse(endTime);
allDate.add(sdf.format(dBegin)); //.replaceAll("-",""))
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(dEnd);
// 测试此日期是否在指定日期之后
while (dEnd.after(calBegin.getTime())) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
allDate.add(sdf.format(calBegin.getTime())); //.replaceAll("-","")
}
return allDate;
}
//时间区间补全方法
public static List<String> findDates_1(String beginTime, String endTime)
throws ParseException {
List<String> allDate = new ArrayList();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dBegin = sdf.parse(beginTime+ " 00:00:00");
Date dEnd = sdf.parse(endTime+ " 00:00:00");
allDate.add(sdf.format(dBegin)); //.replaceAll("-",""))
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(dEnd);
// 测试此日期是否在指定日期之后
while (dEnd.after(calBegin.getTime())) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
allDate.add(sdf.format(calBegin.getTime())); //.replaceAll("-","")
}
return allDate;
}
/**
*
* @param data yyyy-MM-dd
* @return yyyy-MM-dd
*/
public static String getOtherTime(String data,int num){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
//过去七天
c.setTime(getDateTime(data+ " 00:00:00"));
c.add(Calendar.DATE, num);
Date d = c.getTime();
String day = format.format(d);
return day;
}
/**
*
* @param data
* @param num
* @return MM.dd
*/
public static String getOtherTime1(String data,int num){
SimpleDateFormat format = new SimpleDateFormat("MM.dd");
Calendar c = Calendar.getInstance();
//过去七天
c.setTime(getDateTime(data));
c.add(Calendar.DATE, num);
Date d = c.getTime();
String day = format.format(d);
return day;
}
/**
*
* @param data
* @param num
* @return yyyyMMdd
*/
public static Integer getOtherTime2(String data,int num){
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
//过去七天
c.setTime(getDateTime(data));
c.add(Calendar.DATE, num);
Date d = c.getTime();
String day = format.format(d);
return StringUtils.isNotEmpty(day) ? Integer.parseInt(day): 0;
}
/**
* 统计时间段
* @param data yyyy-MM-dd
* @param num
* @return
*/
public static String getOtherTimeAnd(String data,int num){
String startTime = data.substring(5,10).replaceAll("-","\\.");
String endTime = getOtherTime1(data ,num);
StringBuffer sf = new StringBuffer();
sf.append(startTime).append("~").append(endTime.replaceAll("-",""));
return sf.toString();
}
/**
* 获取当天为周几
* @param date yyyy-MM-dd
* @return
*/
public static Integer getDayWeek(String date){
String endTime = date + " 00:00:00";
Calendar calendar = Calendar.getInstance();
calendar.setTime(getDateTime(endTime));
int weekIdx = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return weekIdx;
}
/**
* 获取某月的最后一天
*
*/
public static String getLastDayOfMonth(int year,int month){
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month);
//获取当月最小值
int lastDay = cal.getMinimum(Calendar.DAY_OF_MONTH);
//设置日历中的月份,当月+1月-1天=当月最后一天
cal.set(Calendar.DAY_OF_MONTH, lastDay-1);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("MM.dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
/**
* 获取某月的最后一天
* @param year
* @param month
* @return yyyy-MM-dd
*/
public static String getLastDayOfMonthyyyyMMdd(int year,int month){
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month);
//获取当月最小值
int lastDay = cal.getMinimum(Calendar.DAY_OF_MONTH);
//设置日历中的月份,当月+1月-1天=当月最后一天
cal.set(Calendar.DAY_OF_MONTH, lastDay-1);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
/**
* 获取上一月或下一月
* time yyyy-MM-dd hh:mm:ss
* @return
*/
public static String getPreMonth(String time,int num) {
Calendar ca = Calendar.getInstance();//得到一个Calendar的实例
ca.setTime(getDateTime(time)); //设置时间为当前时间
// ca.add(Calendar.YEAR, +1); //年份+1
ca.add(Calendar.MONTH, num); // 月份-1
Date date = ca.getTime();
String mm = getMM(date);
return mm;
}
public static void main(String[] args) throws ParseException,Exception {
/*String nowDay = "2020-11-15 12:12:11";
String startDay = "2020-11-15 00:00:00";
String endDay = "2020-12-15 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date nowDate = sdf.parse(nowDay);
Date startDate = sdf.parse(startDay);
Date endDate = sdf.parse(endDay);*/
/* String day = "20161124";
String y = day.substring(0, 4);
String m = day.substring(4, 6);
String d = day.substring(6, 8);
System.err.println("y:" + y);
System.err.println("m:" + m);
System.err.println("d:" + d);
System.err.println("day:" + getTimeStamp(day));
Date date = transForDate(1640793600000L);
System.err.println("9999>>>>" + date);
String d1 = getDate1(new Date());
System.err.println("777>>>>" + d1);
System.err.println("时间: " + getWeek("2022-1-30"));*/
/* System.err.println("时间补全:" + findDates("2022-02-01",7));
// System.err.println("8888888:" + getOtherTime("2022-11-01 00:00:00",8));
System.err.println("22222>>>>" +getOtherTimeAnd("2022-02-01",7));
System.err.println("5555>>>>" +getDayWeek("2022-11-05"));
System.err.println("getLastDayOfMonth>>>>" +getLastDayOfMonth(2022,9));
System.err.println("getMonthPreDay>>>>" +getPreMonth("2020-12-15 12:12:11",1));
System.err.println("dateToString>>>>" +dateToString(new Date(),"yyyy-MM-dd"));
System.err.println("5555>>>>" + getOtherTime("2022-11-16 00:00:00",2));
System.err.println("周:"+getDayWeek("2022-11-18"));
System.err.println("年:"+DateUtil.dateToString(new Date(),"yyyy"));
System.err.println("年11:"+"20221205".substring(0,4));*/
/* List<String> findDates = DateUtil.findDates(DateUtil.getDayStamp("2022-11-28"), 1);
System.err.println("dddd>>>>"+findDates);*/
String s = getOtherTime1("2022-11-28 00:00:00",0);
System.err.println("dddd>>>" + s);
}
}