|
@@ -0,0 +1,1228 @@
|
|
|
+package org.springblade.business.utils;
|
|
|
+
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.time.Instant;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author
|
|
|
+ * @version 1.0
|
|
|
+ * @description 日期工具类
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+public class DateUtils {
|
|
|
+ private static Calendar calendar = Calendar.getInstance();
|
|
|
+ private static String PATTERN = "yyyy-MM-dd HH:mm:ss";
|
|
|
+// static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+// static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ /**
|
|
|
+ * 一年时间的分钟数
|
|
|
+ */
|
|
|
+ public static final int ONE_YEAR_MINUTES = 52560000;
|
|
|
+
|
|
|
+ private final static String FORMAT = "yyyy-MM-dd HH:mm";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 时间戳转日期
|
|
|
+ *
|
|
|
+ * @param timestamp
|
|
|
+ * @return date
|
|
|
+ */
|
|
|
+ public static Date timestampToDate(long timestamp) {
|
|
|
+
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String d = format.format(timestamp);
|
|
|
+ Date date = null;
|
|
|
+ try {
|
|
|
+ date = format.parse(d);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ return date;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取日期时间字符串
|
|
|
+ *
|
|
|
+ * @param date
|
|
|
+ * @return yyyy-MM-dd HH:mm:ss
|
|
|
+ */
|
|
|
+ public static String getTimeStr(Date date) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ return format.format(date);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getTimeStr(LocalDateTime date) {
|
|
|
+ return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static String getTimeStr(Date date, String pattern) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat(pattern);
|
|
|
+ return format.format(date);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当天日期字符串
|
|
|
+ *
|
|
|
+ * @param date
|
|
|
+ * @return yyyy-MM-dd
|
|
|
+ */
|
|
|
+ public static String getDateStr(Date date) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ return format.format(date);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 字符串转日期
|
|
|
+ *
|
|
|
+ * @param timeStr
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date strToDate(String timeStr, String pattern) {
|
|
|
+ if (StringUtils.isEmpty(pattern)) {
|
|
|
+ pattern = PATTERN;
|
|
|
+ }
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat(pattern);
|
|
|
+ try {
|
|
|
+ return format.parse(timeStr);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return new Date();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的前一天
|
|
|
+ *
|
|
|
+ * @param currentDate
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getDateYesterday(String currentDate) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ try {
|
|
|
+ Date current = format.parse(currentDate);
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(current);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ Date yesterday = calendar.getTime();
|
|
|
+ return format.format(yesterday);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return currentDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的前一天
|
|
|
+ *
|
|
|
+ * @param currentDate
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getDateYesterdays(String currentDate) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ try {
|
|
|
+ Date current = format.parse(currentDate);
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(current);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, 0);
|
|
|
+ Date yesterday = calendar.getTime();
|
|
|
+ return format.format(yesterday);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return currentDate;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的前一天
|
|
|
+ *
|
|
|
+ * @param currentDate
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getDateYesterday(Date currentDate) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(currentDate);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ Date yesterday = calendar.getTime();
|
|
|
+ return format.format(yesterday);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的后(正)/前(负)X天的时间
|
|
|
+ *
|
|
|
+ * @param currentDate
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static DateTime getDateAdd(Date currentDate, Integer add) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(currentDate);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, add);
|
|
|
+ return DateTime.of(calendar.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取两个日期的年份差
|
|
|
+ *
|
|
|
+ * @param date1
|
|
|
+ * @param date2
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getTwoDateYears(String date1, String date2) {
|
|
|
+ Calendar bef = null;
|
|
|
+ Calendar aft = null;
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ bef = Calendar.getInstance();
|
|
|
+ aft = Calendar.getInstance();
|
|
|
+ bef.setTime(sdf.parse(date1));
|
|
|
+ aft.setTime(sdf.parse(date2));
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ int surplus = aft.get(Calendar.DATE) - bef.get(Calendar.DATE);
|
|
|
+ int result = aft.get(Calendar.MONTH) - bef.get(Calendar.MONTH);
|
|
|
+ int year = aft.get(Calendar.YEAR) - bef.get(Calendar.YEAR);
|
|
|
+ if (result < 0) {
|
|
|
+ result = 1;
|
|
|
+ } else if (result == 0) {
|
|
|
+ result = surplus <= 0 ? 1 : 0;
|
|
|
+ } else {
|
|
|
+ result = 0;
|
|
|
+ }
|
|
|
+ return String.valueOf(year + result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取日期的月和日,并用汉字表示
|
|
|
+ * 如2019-10-17 输出 10月17日
|
|
|
+ *
|
|
|
+ * @param dateString
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getChineseDateMonthAndDay(String dateString) {
|
|
|
+ //判断日期如果长度不符合,则返回错误null
|
|
|
+ if (dateString.length() != 10) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //获取月
|
|
|
+ String dateMonth = dateString.substring(5, 7);
|
|
|
+ //获取日
|
|
|
+ String dateDay = dateString.substring(8, 10);
|
|
|
+ String chineseDate = dateMonth + "月" + dateDay + "日";
|
|
|
+ return chineseDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取日期的月和日,并用汉字表示
|
|
|
+ * 如2019-10-17 输出 2019年10月17日
|
|
|
+ *
|
|
|
+ * @param dateString
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getChineseDateYearAndMonthAndDay(String dateString) {
|
|
|
+ //判断日期如果长度不符合,则返回错误null
|
|
|
+ if (StringUtils.isEmpty(dateString) || dateString.length() != 10) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //获取年
|
|
|
+ String year = dateString.substring(0, 4);
|
|
|
+ //获取月
|
|
|
+ String dateMonth = dateString.substring(5, 7);
|
|
|
+ //获取日
|
|
|
+ String dateDay = dateString.substring(8, 10);
|
|
|
+ String chineseDate = year + "年" + dateMonth + "月" + dateDay + "日";
|
|
|
+ return chineseDate;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取日期的月和日,并用汉字表示
|
|
|
+ * 如2019-10-17 输出 10月
|
|
|
+ *
|
|
|
+ * @param date
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getChineseDateMonth(Date date) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String dateString = format.format(date);
|
|
|
+ //获取月
|
|
|
+ String dateMonth = dateString.substring(5, 7);
|
|
|
+ String chineseDate = dateMonth + "月";
|
|
|
+ return chineseDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取本年最后一天
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getYearEnd() {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.set(Calendar.MONTH, calendar.getActualMaximum(Calendar.MONTH));
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
|
|
+ Date currYearLast = calendar.getTime();
|
|
|
+ return new SimpleDateFormat("yyyy-MM-dd").format(currYearLast);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定年最后一天
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getYearEnd(Date endDate) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(endDate);
|
|
|
+ calendar.set(Calendar.MONTH, calendar.getActualMaximum(Calendar.MONTH));
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算两个日期的间隔天数
|
|
|
+ *
|
|
|
+ * @param startTime
|
|
|
+ * @param endTime
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static int cacTwoDateDays(String startTime, String endTime) {
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Date date1 = null;
|
|
|
+ Date date = null;
|
|
|
+ Long l = 0L;
|
|
|
+ try {
|
|
|
+ date = formatter.parse(startTime);
|
|
|
+ long ts = date.getTime();
|
|
|
+ date1 = formatter.parse(endTime);
|
|
|
+ long ts1 = date1.getTime();
|
|
|
+
|
|
|
+ l = (ts - ts1) / (1000 * 60 * 60 * 24);
|
|
|
+
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return l.intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算两个日期的间隔小时数
|
|
|
+ *
|
|
|
+ * @param startTime
|
|
|
+ * @param endTime
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static int cacTwoDateHours(String startTime, String endTime) {
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH");
|
|
|
+ Date date1 = null;
|
|
|
+ Date date = null;
|
|
|
+ Long l = 0L;
|
|
|
+ try {
|
|
|
+ date = formatter.parse(startTime);
|
|
|
+ long ts = date.getTime();
|
|
|
+ date1 = formatter.parse(endTime);
|
|
|
+ long ts1 = date1.getTime();
|
|
|
+
|
|
|
+ l = (ts - ts1) / (1000 * 60 * 60);
|
|
|
+
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return l.intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取下一个生日
|
|
|
+ *
|
|
|
+ * @param todayTime 当前日期
|
|
|
+ * @param birthdayTime 生日日期
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getNextBirthday(String todayTime, String birthdayTime) {
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Date date1 = null;
|
|
|
+ Date date = null;
|
|
|
+ Long l = 0L;
|
|
|
+ try {
|
|
|
+ date = formatter.parse(todayTime);
|
|
|
+ long ts = date.getTime();
|
|
|
+ date1 = formatter.parse(birthdayTime);
|
|
|
+ long ts1 = date1.getTime();
|
|
|
+ //如果生日日期在当天日期之前,则生日变为明年
|
|
|
+ if (ts > ts1) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date1);
|
|
|
+ calendar.add(Calendar.YEAR, +1);
|
|
|
+ Date nextBirthday = calendar.getTime();
|
|
|
+ return getDateStr(nextBirthday);
|
|
|
+ }
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return birthdayTime;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断当前日期是星期几
|
|
|
+ *
|
|
|
+ * @param pTime 修要判断的时间
|
|
|
+ * @return dayForWeek 判断结果
|
|
|
+ * @Exception 发生异常
|
|
|
+ */
|
|
|
+ public static int dayForWeek(String pTime) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ try {
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
+ c.setTime(format.parse(pTime));
|
|
|
+ int dayForWeek = 0;
|
|
|
+ if (c.get(Calendar.DAY_OF_WEEK) == 1) {
|
|
|
+ dayForWeek = 7;
|
|
|
+ } else {
|
|
|
+ dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
|
|
|
+ }
|
|
|
+ return dayForWeek;
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String int2chineseNum(int src) {
|
|
|
+ final String num[] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
|
|
|
+ final String unit[] = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};
|
|
|
+ String dst = "";
|
|
|
+ int count = 0;
|
|
|
+ while (src > 0) {
|
|
|
+ dst = (num[src % 10] + unit[count]) + dst;
|
|
|
+ src = src / 10;
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ return dst.replaceAll("零[千百十]", "零").replaceAll("零+万", "万")
|
|
|
+ .replaceAll("零+亿", "亿").replaceAll("亿万", "亿零")
|
|
|
+ .replaceAll("零+", "零").replaceAll("零$", "");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取日期对应的今年的月和日
|
|
|
+ *
|
|
|
+ * @param lunarDate 如传入2015-06-10,今年是2019,得到2019-06-10
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getThisYearMonthAndDay(String lunarDate) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ //获取当前公历日期
|
|
|
+ String today = getDateStr(new Date());
|
|
|
+ //截取公历日期的年份加上传入日期的月和日
|
|
|
+ String year = today.substring(0, 5);
|
|
|
+ String date = lunarDate.substring(5, lunarDate.length());
|
|
|
+ String thisYearDay = year + date;
|
|
|
+ return thisYearDay;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取数组日期对应的日期String
|
|
|
+ *
|
|
|
+ * @param dateArray
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getStringDate(int[] dateArray) {
|
|
|
+ int year = dateArray[0];
|
|
|
+ int month = dateArray[1];
|
|
|
+ int date = dateArray[2];
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ cal.set(year, month - 1, date);
|
|
|
+ Date yesterday = cal.getTime();
|
|
|
+ return getDateStr(yesterday);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取过去第几天的日期
|
|
|
+ *
|
|
|
+ * @param past
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getPastDate(int past) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
|
|
|
+ Date today = calendar.getTime();
|
|
|
+ return today;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取时间多少分钟之后的时间
|
|
|
+ *
|
|
|
+ * @param date
|
|
|
+ * @param minutes
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getDateAfterMinutes(Date date, int minutes) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + minutes);
|
|
|
+ Date afterDate = calendar.getTime();
|
|
|
+ return afterDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取时间多少秒之后的时间
|
|
|
+ *
|
|
|
+ * @param date
|
|
|
+ * @param minutes
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getDateAfterSecond(Date date, int minutes) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + minutes);
|
|
|
+ Date afterDate = calendar.getTime();
|
|
|
+ return afterDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date getDayEnd(Date endDate) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(endDate);
|
|
|
+ // calendar.setTimeInMillis(endDate.getTime());
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ Date end = calendar.getTime();
|
|
|
+ return end;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date getDayStart(Date startDate) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(startDate);
|
|
|
+ // calendar.setTimeInMillis(startDate.getTime());
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ Date start = calendar.getTime();
|
|
|
+ return start;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date getMonthStart(Date startDate) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(startDate);
|
|
|
+ // calendar.setTimeInMillis(startDate.getTime());
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ Date start = calendar.getTime();
|
|
|
+ return start;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date getYearStart(Date startDate) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(startDate);
|
|
|
+ // calendar.setTimeInMillis(startDate.getTime());
|
|
|
+ calendar.set(Calendar.MONTH, 0);
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ Date start = calendar.getTime();
|
|
|
+ return start;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 一年前的下个月开始日期
|
|
|
+ */
|
|
|
+ public static Date getOneYearTimeNextMonth(Date now) {
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
+ c.setTime(now);
|
|
|
+ //年份减1
|
|
|
+ c.add(Calendar.YEAR, -1);
|
|
|
+ c.add(Calendar.MONTH, 1);
|
|
|
+ c.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ c.set(Calendar.HOUR, 0);
|
|
|
+ c.set(Calendar.MINUTE, 0);
|
|
|
+ c.set(Calendar.SECOND, 0);
|
|
|
+ return c.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取固定值之前的时间
|
|
|
+ *
|
|
|
+ * @param now
|
|
|
+ * @param sec
|
|
|
+ * @return {@link Date}
|
|
|
+ **/
|
|
|
+ public static Date getLastTime(Date now, int sec) {
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
+ c.setTime(now);
|
|
|
+ c.add(Calendar.SECOND, -sec);
|
|
|
+ return c.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static Long dateDiff(Date startTime, Date endTime) {
|
|
|
+ long diff;
|
|
|
+ long min = 0;
|
|
|
+ // 获得两个时间的毫秒时间差异
|
|
|
+ diff = endTime.getTime() - startTime.getTime();
|
|
|
+ min = diff / 60 / 1000;
|
|
|
+ return min;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定周的周一日期
|
|
|
+ *
|
|
|
+ * @param year 年
|
|
|
+ * @param month 月
|
|
|
+ * @param weekOfMonth 当月第n周
|
|
|
+ * @return {@link Date}
|
|
|
+ **/
|
|
|
+ public static Date getMonthOfWeekDate(int year, int month, int weekOfMonth) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.set(Calendar.YEAR, year);
|
|
|
+ calendar.set(Calendar.MONTH, month - 1);
|
|
|
+ calendar.set(Calendar.WEEK_OF_MONTH, weekOfMonth);
|
|
|
+ calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek() + 1);
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前时间上一月 时间 YYYYMM
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getUpMonth() {
|
|
|
+ return getAddMonth(-1);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取某个月的时间 YYYYMM
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getAddMonth(int months) {
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ cal.add(Calendar.MONTH, months);
|
|
|
+
|
|
|
+ SimpleDateFormat formats = new SimpleDateFormat("yyyyMM");
|
|
|
+ formats.format(cal.getTime());
|
|
|
+ return formats.format(cal.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前时间上一年 时间 YYYYMM
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getUpYear() {
|
|
|
+ return getAddYear(-1);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前时间上一年 时间 YYYYMM
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getAddYear(int year) {
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ cal.add(Calendar.YEAR, year);
|
|
|
+
|
|
|
+ SimpleDateFormat formats = new SimpleDateFormat("yyyy");
|
|
|
+
|
|
|
+
|
|
|
+ return formats.format(cal.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当年的最后一天
|
|
|
+ *
|
|
|
+ * @param year
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getCurrYearLast(int year) {
|
|
|
+
|
|
|
+
|
|
|
+ SimpleDateFormat formats = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.clear();
|
|
|
+ calendar.set(Calendar.YEAR, year);
|
|
|
+ calendar.roll(Calendar.DAY_OF_YEAR, -1);
|
|
|
+ Date currYearLast = calendar.getTime();
|
|
|
+ return formats.format(currYearLast);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date getYesterdayDayEnd() {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) - 1,
|
|
|
+ 23, 59, 59);
|
|
|
+ Date end = calendar.getTime();
|
|
|
+ return end;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断时间远程时间是否大于缓存时间
|
|
|
+ *
|
|
|
+ * @param theRemoteTime 远程时间
|
|
|
+ * @param cacheTime 缓存时间
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static boolean twoTimeJudgment(String theRemoteTime, String cacheTime) {
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ try {
|
|
|
+ Date sd1 = df.parse(theRemoteTime);
|
|
|
+ Date sd2 = df.parse(cacheTime);
|
|
|
+ long long1 = sd1.getTime();
|
|
|
+ long long2 = sd2.getTime();
|
|
|
+ if (long1 > long2) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 指定月份最后一天 并且加上指定天数
|
|
|
+ *
|
|
|
+ * @param month
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getMaxDateMonth(String month, int num) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ try {
|
|
|
+ Date nowDate = format.parse(month);
|
|
|
+ calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(nowDate);
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
|
|
+ calendar.add(Calendar.DATE, num);// num为增加的天数,可以改变的
|
|
|
+ return sdf.format(calendar.getTime());
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 指定月份第一天 并且加上指定天数
|
|
|
+ *
|
|
|
+ * @param month
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getMinDateMonth(String month, int num) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ try {
|
|
|
+ Date nowDate = format.parse(month);
|
|
|
+ calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(nowDate);
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
|
|
|
+ calendar.add(Calendar.DATE, -num);// num为增加的天数,可以改变的
|
|
|
+ return sdf.format(calendar.getTime());
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 时间向下取整,分钟数
|
|
|
+ *
|
|
|
+ * @param timestamp 传入毫秒级时间戳
|
|
|
+ * @param interval 分钟向下取整周期
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getLowIntervalMinuetStr(Long timestamp, Integer interval) {
|
|
|
+ LocalDateTime dateTime;
|
|
|
+ if (timestamp != null) {
|
|
|
+ dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
|
|
|
+ } else {
|
|
|
+ dateTime = LocalDateTime.now(ZoneId.systemDefault());
|
|
|
+ }
|
|
|
+ int minute = dateTime.getMinute();
|
|
|
+ int lowerIntervalMinute = minute / interval * interval % 60;
|
|
|
+ String headTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH").withZone(ZoneId.systemDefault()).format(dateTime);
|
|
|
+ if (lowerIntervalMinute < 10) {
|
|
|
+ return new StringBuilder(headTime).append(":0").append(lowerIntervalMinute).append(":00").toString();
|
|
|
+ }
|
|
|
+ return new StringBuilder(headTime).append(":").append(lowerIntervalMinute).append(":00").toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param timestamp
|
|
|
+ * @param interval
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime getLowIntervalMinuetTime(Long timestamp, Integer interval) {
|
|
|
+ LocalDateTime dateTime;
|
|
|
+ if (timestamp != null) {
|
|
|
+ dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
|
|
|
+ } else {
|
|
|
+ dateTime = LocalDateTime.now(ZoneId.systemDefault());
|
|
|
+ }
|
|
|
+ int minute = dateTime.getMinute();
|
|
|
+ int lowerIntervalMinute = minute / interval * interval % 60;
|
|
|
+ return dateTime.withMinute(lowerIntervalMinute).withSecond(0).withNano(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param dateTime
|
|
|
+ * @param interval
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static DateTime getLowIntervalMinuetTime(Date dateTime, Integer interval) {
|
|
|
+ LocalDateTime localDateTime = DateUtil.toLocalDateTime(dateTime);
|
|
|
+ int minute = localDateTime.getMinute();
|
|
|
+ int lowerIntervalMinute = minute / interval * interval % 60;
|
|
|
+ LocalDateTime lowInterval = localDateTime.withMinute(lowerIntervalMinute).withSecond(0).withNano(0);
|
|
|
+ return DateUtil.parse(DateUtil.formatLocalDateTime(lowInterval));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param localDateTime
|
|
|
+ * @param interval
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static DateTime getLowIntervalMinuetTime(LocalDateTime localDateTime, Integer interval) {
|
|
|
+ int minute = localDateTime.getMinute();
|
|
|
+ int lowerIntervalMinute = minute / interval * interval % 60;
|
|
|
+ LocalDateTime lowInterval = localDateTime.withMinute(lowerIntervalMinute).withSecond(0).withNano(0);
|
|
|
+ return DateUtil.parse(DateUtil.formatLocalDateTime(lowInterval));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取下一个分钟级别周期时间
|
|
|
+ *
|
|
|
+ * @param currentTime
|
|
|
+ * @param interval
|
|
|
+ * @param formatter
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getNextIntervalTime(String currentTime, long interval, String formatter) {
|
|
|
+ LocalDateTime dateTime = LocalDateTime.parse(currentTime, DateTimeFormatter.ofPattern(formatter));
|
|
|
+ dateTime = dateTime.plusMinutes(interval);
|
|
|
+ return DateTimeFormatter.ofPattern(formatter).withZone(ZoneId.systemDefault()).format(dateTime);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 获取某一时间 所在 月份 的第一天
|
|
|
+ * 比如 : 2020-01-20
|
|
|
+ * 结果为: 2020-01-01 00:00:00
|
|
|
+ * */
|
|
|
+ public static Date getFirstDateOfMonth(Date date) {
|
|
|
+ Calendar firstDate = Calendar.getInstance();
|
|
|
+ firstDate.setTime(date);
|
|
|
+ final int last = firstDate.getActualMinimum(Calendar.DAY_OF_MONTH);
|
|
|
+ firstDate.set(Calendar.DAY_OF_MONTH, last);
|
|
|
+ firstDate.set(Calendar.HOUR, 00);
|
|
|
+ firstDate.set(Calendar.MINUTE, 00);
|
|
|
+ firstDate.set(Calendar.SECOND, 00);
|
|
|
+ //当前日期 的 月份的 第一天)
|
|
|
+ return firstDate.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 获取某一时间 所在 月份 的最后一天
|
|
|
+ * 比如 : 2020-01-20
|
|
|
+ * 结果为: 2020-01-31 00:00:00
|
|
|
+ * */
|
|
|
+ public static Date getEndDayOfMonth(Date date) {
|
|
|
+
|
|
|
+ Calendar lastDateMonth = Calendar.getInstance();
|
|
|
+ lastDateMonth.setTime(date);
|
|
|
+ final int lastDay = lastDateMonth.getActualMaximum(Calendar.DAY_OF_MONTH);
|
|
|
+ lastDateMonth.set(Calendar.DAY_OF_MONTH, lastDay);
|
|
|
+ lastDateMonth.set(Calendar.HOUR, 23);
|
|
|
+ lastDateMonth.set(Calendar.MINUTE, 59);
|
|
|
+ lastDateMonth.set(Calendar.SECOND, 59);
|
|
|
+ //当前日期 的月份的最后一天
|
|
|
+ return lastDateMonth.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取上个月开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getLastMonthStartTime() {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ //上个月
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.add(Calendar.MONTH, 1);
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ return format.format(calendar.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取上个月结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getNextMonthEndTime() {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ calendar.add(Calendar.DATE, 0);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ return format.format(calendar.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取本月开始时间
|
|
|
+ *
|
|
|
+ * @return xxxx-xx-01 00:00:59
|
|
|
+ */
|
|
|
+ public static String getStartTimeOfThisMonth() {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ //上个月
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.add(Calendar.MONTH, 0);
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ return format.format(calendar.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取本月结束时间
|
|
|
+ *
|
|
|
+ * @return xxxx-xx-xx 23:59:59
|
|
|
+ */
|
|
|
+ public static String getLastDayOfTheMonth() {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ return format.format(calendar.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static Date clearMs(Date date) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date clearS(Date date) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static String getStartTimes() {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ //获取当天开始时间
|
|
|
+ String StartTime = sdf.format(getStartTime());
|
|
|
+ return StartTime;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date getYear(int year) {
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
+ c.set(year, 1, 1);
|
|
|
+ return c.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getStartTime() {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Calendar todayStart = Calendar.getInstance();
|
|
|
+ todayStart.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ todayStart.set(Calendar.MINUTE, 0);
|
|
|
+ todayStart.set(Calendar.SECOND, 0);
|
|
|
+ todayStart.set(Calendar.MILLISECOND, 0);
|
|
|
+ return format.format(todayStart.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getEndTime() {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Calendar todayEnd = Calendar.getInstance();
|
|
|
+ todayEnd.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ todayEnd.set(Calendar.MINUTE, 59);
|
|
|
+ todayEnd.set(Calendar.SECOND, 59);
|
|
|
+ todayEnd.set(Calendar.MILLISECOND, 59);
|
|
|
+ return format.format(todayEnd.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ private final static String YEAR = "year";
|
|
|
+ private final static String MOUTH = "mouth";
|
|
|
+ private final static String DAY = "day";
|
|
|
+ private final static String HOUR = "hour";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return
|
|
|
+ * @description {
|
|
|
+ * hour: startTime = 2022-04-15 00:00:00 、2022-04-15 01:00:00 、2022-04-15 02:00:00
|
|
|
+ * day: startTime = 2022-04-15 00:00:00 、2022-04-16 00:00:00 、2022-04-17 00:00:00
|
|
|
+ * mouth: startTime = 2022-04-01 00:00:00 、2022-05-01 00:00:00 、2022-06-01 00:00:00
|
|
|
+ * year: startTime = 2022-01-01 00:00:00 、2023-01-01 00:00:00 、2024-01-01 00:00:00
|
|
|
+ * }
|
|
|
+ */
|
|
|
+ public static Date getStartTime(String date, Date time) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(time);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ if (YEAR.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1);
|
|
|
+ calendar.set(Calendar.MONTH, 0);
|
|
|
+ calendar.set(Calendar.DATE, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ }
|
|
|
+ if (MOUTH.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
|
|
|
+ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
|
|
|
+ calendar.set(Calendar.DATE, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ }
|
|
|
+ if (DAY.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
|
|
|
+ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
|
|
|
+ calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ }
|
|
|
+ if (HOUR.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
|
|
|
+ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
|
|
|
+ calendar.set(Calendar.DATE, calendar.get(Calendar.DATE));
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);
|
|
|
+ }
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return
|
|
|
+ * @description {
|
|
|
+ * hour: endTime = 2022-04-15 00:59:59 、2022-04-15 01:59:59 、2022-04-15 02:59:59
|
|
|
+ * day: endTime = 2022-04-15 23:59:59 、2022-04-16 23:59:59 、2022-04-17 23:59:59
|
|
|
+ * mouth: endTime = 2022-04-max 23:59:59 、2022-05-max 23:59:59 、2022-06-max 23:59:59
|
|
|
+ * year: endTime = 2022-12-31 23:59:59 、2023-12-31 23:59:59 、2024-12-31 23:59:59
|
|
|
+ * }
|
|
|
+ */
|
|
|
+ public static Date getEndTime(String date, Date time) {
|
|
|
+
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(time);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ if (YEAR.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1);
|
|
|
+ calendar.set(Calendar.MONTH, 11);
|
|
|
+ calendar.set(Calendar.DATE, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ }
|
|
|
+ if (MOUTH.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
|
|
|
+ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
|
|
|
+ calendar.set(Calendar.DATE, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ }
|
|
|
+ if (DAY.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
|
|
|
+ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
|
|
|
+ calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ }
|
|
|
+ if (HOUR.equals(date)) {
|
|
|
+ calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
|
|
|
+ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
|
|
|
+ calendar.set(Calendar.DATE, calendar.get(Calendar.DATE));
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);
|
|
|
+ }
|
|
|
+ LocalDateTime localDateTime = calendar.getTime().toInstant()
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
+ .toLocalDateTime();
|
|
|
+ if (YEAR.equals(date) || MOUTH.equals(date)) {
|
|
|
+ localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth());
|
|
|
+ }
|
|
|
+ return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取两个日期之间的所有日期 (年月日)
|
|
|
+ *
|
|
|
+ * @param startTime
|
|
|
+ * @param endTime
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static List<String> getBetweenDate(String startTime, String endTime) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ // 声明保存日期集合
|
|
|
+ List<String> list = new ArrayList<String>();
|
|
|
+ try {
|
|
|
+ // 转化成日期类型
|
|
|
+ Date startDate = sdf.parse(startTime);
|
|
|
+ Date endDate = sdf.parse(endTime);
|
|
|
+
|
|
|
+ //用Calendar 进行日期比较判断
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ while (startDate.getTime() <= endDate.getTime()) {
|
|
|
+ // 把日期添加到集合
|
|
|
+ list.add(sdf.format(startDate));
|
|
|
+ // 设置日期
|
|
|
+ calendar.setTime(startDate);
|
|
|
+ //把日期增加一天
|
|
|
+ calendar.add(Calendar.DATE, 1);
|
|
|
+ // 获取增加后的日期
|
|
|
+ startDate = calendar.getTime();
|
|
|
+ }
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取两个日期之间的所有日期 (年月日)
|
|
|
+ *
|
|
|
+ * @param startTime
|
|
|
+ * @param endTime
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static List<String> getBetweenMonth(String startTime, String endTime) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
|
|
+ // 声明保存日期集合
|
|
|
+ List<String> list = new ArrayList<String>();
|
|
|
+ try {
|
|
|
+ // 转化成日期类型
|
|
|
+ Date startDate = sdf.parse(startTime);
|
|
|
+ Date endDate = sdf.parse(endTime);
|
|
|
+
|
|
|
+ //用Calendar 进行日期比较判断
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ while (startDate.getTime() <= endDate.getTime()) {
|
|
|
+ // 把日期添加到集合
|
|
|
+ list.add(sdf.format(startDate));
|
|
|
+ // 设置日期
|
|
|
+ calendar.setTime(startDate);
|
|
|
+ //把日期增加一天
|
|
|
+ calendar.add(Calendar.MONTH, 1);
|
|
|
+ // 获取增加后的日期
|
|
|
+ startDate = calendar.getTime();
|
|
|
+ }
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定年月的第一天
|
|
|
+ *
|
|
|
+ * @param year
|
|
|
+ * @param month
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getFirstDayOfMonth(int year, int month) {
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ //清除可能存在的缓存
|
|
|
+ cal.clear();
|
|
|
+ //设置年份
|
|
|
+ cal.set(Calendar.YEAR, year);
|
|
|
+ //设置月份
|
|
|
+ cal.set(Calendar.MONTH, month - 1);
|
|
|
+ //获取某月最小天数
|
|
|
+ int firstDay = cal.getMinimum(Calendar.DATE);
|
|
|
+ //设置日历中月份的最小天数
|
|
|
+ cal.set(Calendar.DAY_OF_MONTH, firstDay);
|
|
|
+ //格式化日期
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ return sdf.format(cal.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定年月的最后一天
|
|
|
+ *
|
|
|
+ * @param year
|
|
|
+ * @param month
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getLastDayOfMonth(int year, int month) {
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ //清除可能存在的缓存
|
|
|
+ cal.clear();
|
|
|
+ //设置年份
|
|
|
+ cal.set(Calendar.YEAR, year);
|
|
|
+ //设置月份
|
|
|
+ cal.set(Calendar.MONTH, month-1);
|
|
|
+ //获取某月最大天数
|
|
|
+ int lastDay = cal.getActualMaximum(Calendar.DATE);
|
|
|
+ //设置日历中月份的最大天数
|
|
|
+ cal.set(Calendar.DAY_OF_MONTH, lastDay);
|
|
|
+ //格式化日期
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ return sdf.format(cal.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析 HH:mm 格式的字符串,获得分钟数
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ */
|
|
|
+ public static Integer getMinuteValueByStr(String str) {
|
|
|
+ String[] split = str.split(":");
|
|
|
+ return Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1]);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|