1.时间处理格式:只显示某个格式的时间(yyyy-MM-dd HH:mm:ss)
@Override
public String dateFormat(Date currentTime, String periodType) {
String currentDatetime = null;
switch (periodType) {
case "hourly": {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
currentDatetime = format.format(currentTime);
break;
}
case "daily":
case "weekly": {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
currentDatetime = format.format(currentTime);
break;
}
case "monthly": {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
currentDatetime = format.format(currentTime);
break;
}
case "yearly": {
SimpleDateFormat format = new SimpleDateFormat("yyyy");
currentDatetime = format.format(currentTime);
break;
}
}
return currentDatetime;
}
2.获取某一天 的时间处理
import com.google.common.collect.Lists;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtil {
/**
* 时间分秒清零
*
* @param date
* @return
*/
public static Date resetMinuteZero(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.setTimeInMillis(date.getTime());
// 将分 秒 毫秒域清零
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 时间清零
*
* @param date
* @return
*/
public static Date resetTimeZero(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 某天的结束时间
*
* @param date
* @return
*/
public static Date resetTimeZeroEnd(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 月1号
*
* @param date
* @return
*/
public static Date resetMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 加小时
*
* @param date
* @return
*/
public static Date addHour(Date date, int n) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 加分钟
cal.add(Calendar.HOUR, n);
return cal.getTime();
}
/**
* 加分钟
*
* @param date
* @return
*/
public static Date addMinute(Date date, int n) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 加分钟
cal.add(Calendar.MINUTE, n);
return cal.getTime();
}
/**
* 加秒
*
* @param date
* @return
*/
public static Date addSecond(Date date, int n) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 加秒
cal.add(Calendar.SECOND, n);
return cal.getTime();
}
/**
* 加天
*
* @param date
* @return
*/
public static Date addDay(Date date, int n) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 加天
cal.add(Calendar.DATE, n);
return cal.getTime();
}
/**
* 往前推一月
*
* @param date
* @return
*/
public static Date recentMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, -1);
calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 往前推一天
*
* @param date
* @return
*/
public static Date recentDay(Date date) {
Date nowDate = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(nowDate);
calendar.add(Calendar.DATE, -1);
return calendar.getTime();
}
/**
* 往后推一天
*
* @param date
* @return
*/
public static Date futureDay(Date date) {
Date nowDate = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(nowDate);
calendar.add(Calendar.DATE, 1);
return calendar.getTime();
}
/**
* 往前推一年
*
* @param date
* @return
*/
public static Date recentYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//
cal.add(Calendar.YEAR, -1);
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 时间处理
*
* @param date
* @return 数字式日期(如 2022-06-27)
*/
public static String timeDispose(Date date) {
String str = date + "";
SimpleDateFormat sdf1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date parse = null;
try {
parse = sdf1.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return sdf2.format(parse);
}
/**
* 今天时间
*
* @param date
* @return
*/
public static Date todayDay(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String nowStr = sdf.format(date) + " 00:00:00"; //得到今天凌晨时间
Date todayTime = null;
try {
todayTime = sdf.parse(nowStr);
} catch (ParseException e) {
e.printStackTrace();
}
return todayTime;
}
/**
* 今天结束时间
*
* @param date
* @return
*/
public static Date todayDayEnd(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String nowStr = sdf.format(date) + " 23:59:59";
Date todayTime = null;
try {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
todayTime = sf.parse(nowStr);
} catch (ParseException e) {
e.printStackTrace();
}
return todayTime;
}
/**
* 昨天的0点
*
* @param date
* @return
*/
public static Date yesterday(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1);//-1今天的时间减一天
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 昨天的今天这个点
*
* @param date
* @return
*/
public static Date yesterdayToday(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1);//-1今天的时间减一天
return calendar.getTime();
}
/**
* 昨天的结束时间
*
* @param date
* @return
*/
public static Date yesterdayEnd(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1);//-1今天的时间减一天
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 昨天时间
*
* @param date
* @return
*/
public static Date yesterday2(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1);//-1今天的时间减一天
String tomorrow = sdf.format(calendar.getTime()) + " 00:00:00"; //得到昨天凌晨的时间
Date tomorrowTime = null;
try {
tomorrowTime = sdf.parse(tomorrow);
} catch (ParseException e) {
e.printStackTrace();
}
return tomorrowTime;
}
/**
* 加月
*
* @param date
* @return
*/
public static Date addMonth(Date date, int n) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 加天
cal.add(Calendar.MONTH, n);
return cal.getTime();
}
/**
* 获得星期
*
* @param date
* @return
*/
public static int getWeekday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_WEEK);
}
/**
* 获得本周一
*
* @param date
* @return
*/
public static Date getThisWeekMonday(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
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);
String week = sdf.format(cal.getTime()) + " 00:00:00"; //得到昨天凌晨的时间
Date thisWeek = null;
try {
thisWeek = sdf.parse(week);
} catch (ParseException e) {
e.printStackTrace();
}
return thisWeek;
}
/**
* 获得上周一
*
* @param date
* @return
*/
public static Date getLastWeekMonday(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(date));
cal.add(Calendar.DATE, -7);
String week = sdf.format(cal.getTime()) + " 00:00:00"; //得到昨天凌晨的时间
Date lastWeek = null;
try {
lastWeek = sdf.parse(week);
} catch (ParseException e) {
e.printStackTrace();
}
return lastWeek;
}
/**
* 下个月月初
*
* @param date
* @return
*/
public static Date getNextMonthStart(Date date) {
Date nextMonth = getNextMonth(date);
return resetMonth(nextMonth);
}
/**
* 下个月月末
*
* @param date
* @return
*/
public static Date getNextMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int monthNum = cal.get(Calendar.MONTH);// 月份-1
List<Integer> m1 = Arrays.asList(2, 4, 7, 9);
List<Integer> m2 = Arrays.asList(1, 3, 5, 6, 8, 10);//3,5,7,8,10,12
//
Calendar newCal = Calendar.getInstance();
if (monthNum == 0) {
int tempDay = 28;
int ny = cal.get(Calendar.YEAR);
if ((ny % 100 != 0 && ny % 4 == 0) || (ny % 100 == 0 && ny % 400 == 0)) {
tempDay = 29;
}
newCal.set(Calendar.YEAR, cal.get(Calendar.YEAR));
newCal.set(Calendar.MONTH, monthNum + 1);
newCal.set(Calendar.DAY_OF_MONTH, tempDay);
newCal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
newCal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
newCal.set(Calendar.SECOND, 0);
newCal.set(Calendar.MILLISECOND, 0);
} else if (monthNum == 11) {
newCal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 1);
newCal.set(Calendar.MONTH, 0);
newCal.set(Calendar.DAY_OF_MONTH, 31);
newCal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
newCal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
newCal.set(Calendar.SECOND, 0);
newCal.set(Calendar.MILLISECOND, 0);
} else if (m1.contains(monthNum)) {
newCal.set(Calendar.YEAR, cal.get(Calendar.YEAR));
newCal.set(Calendar.MONTH, monthNum + 1);
newCal.set(Calendar.DAY_OF_MONTH, 30);
newCal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
newCal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
newCal.set(Calendar.SECOND, 0);
newCal.set(Calendar.MILLISECOND, 0);
} else if (m2.contains(monthNum)) {
newCal.set(Calendar.YEAR, cal.get(Calendar.YEAR));
newCal.set(Calendar.MONTH, monthNum + 1);
newCal.set(Calendar.DAY_OF_MONTH, 31);
newCal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
newCal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
newCal.set(Calendar.SECOND, 0);
newCal.set(Calendar.MILLISECOND, 0);
}
// 将时
return newCal.getTime();
}
/**
* 年1月
*
* @param date
* @return
*/
public static Date resetYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 下一年年初
*
* @param date
* @return
*/
public static Date getNextYearStart(Date date) {
Date nextYear = getNextYear(date);
return resetYear(nextYear);
}
/**
* 下一年年末
*
* @param date
* @return
*/
public static Date getNextYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//
Calendar newCal = Calendar.getInstance();
newCal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 2);
newCal.set(Calendar.MONTH, 0);
newCal.set(Calendar.DAY_OF_MONTH, 1);
newCal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
newCal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
newCal.set(Calendar.SECOND, cal.get(Calendar.SECOND));
newCal.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
return addDay(newCal.getTime(), -1);// 年末
}
/**
* 根据时间按顺序返回一个日期序列
* <p>
* 前后都闭[]
*
* @param startDate
* @param endDate
* @return
*/
public static List<String> getDaysList(Date startDate, Date endDate, String format) {
List<String> daysList = Lists.newLinkedList();
if (startDate.after(endDate)) {
return daysList;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
while (!calendar.getTime().after(endDate)) {
daysList.add(simpleDateFormat.format(calendar.getTime()));
calendar.add(Calendar.DATE, 1);
}
return daysList;
}
/**
* 获取时间间隔的list
* <p>
* 前闭后开[)
* 如 2022-04-01 00:00:00 2022-04-02 00:00:00
* 如果perod为30
* 会以00:00开头 00:00结束
*
* @param startDate
* @param endDate
* @param format
* @return
*/
public static List<String> getHoursList(Date startDate, Date endDate, String format, int period) {
List<String> hoursList = Lists.newLinkedList();
if (startDate.after(endDate)) {
return hoursList;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
while (calendar.getTime().before(endDate)) {
hoursList.add(simpleDateFormat.format(calendar.getTime()));
calendar.add(Calendar.MINUTE, period);
}
return hoursList;
}
/**
* 明天时间
*
* @param date
* @return
*/
public static Date tomorrow2(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(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);
return calendar.getTime();
}
/**
* 明天结束时间
*
* @param date
* @return
*/
public static Date tomorrowEnd(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 后天时间
*
* @param date
* @return
*/
public static Date dayAfteTomorrow(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, 2);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取这个月的第几天
*
* @return
*/
public static Date getMonthDay(Date date, int day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取上个月的最后一天的
* 开始时间和结束时间
*
* @param date
* @return
*/
public static Date[] getLastMonthLastDays(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date startDate = calendar.getTime();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date endDate = calendar.getTime();
return new Date[]{startDate, endDate};
}
public static Date getLastMonthEndDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
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);
calendar.add(Calendar.DAY_OF_MONTH, -1);
return calendar.getTime();
}
/**
* 计算一天的时间
*/
public static Date getPredictionEndTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);
calendar.add(Calendar.MINUTE, -15);
return calendar.getTime();
}
/**
* 取指定时间靠近的 00、15、45时刻
*
* @param date
* @return
*/
public static Long getQuarterTimestamp(Date date) {
// 取指定时间靠近的 00、15、45时刻:时间加7.5分钟,然后除15分钟取整,最后再乘15分钟
return ((date.getTime() + (75 * 6 * 1000)) / (15 * 60 * 1000)) * (15 * 60 * 1000);
}
/**
* 将date格式化为HH:mm,并输出结果为string
*/
public static List<String> changeDateToString(List<Date> dates){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
List<String> strings = new ArrayList<>();
for (Date date : dates) {
String format = simpleDateFormat.format(date);
strings.add(format);
}
return strings;
}
/**
* 一天96个点
*/
public static List<String> day96Points() {
Date start = DateUtil.yesterday(new Date());
Date end = DateUtil.resetTimeZero(new Date());
//
List<String> quarterTimes = new ArrayList<>();
SimpleDateFormat xFormat = new SimpleDateFormat("HH:mm");
while (start.getTime() < end.getTime()) {
quarterTimes.add(xFormat.format(start));
Date nextQuarter = DateUtil.addMinute(start, 15);
start = nextQuarter;
}
return quarterTimes;
}
/*
* @Title: getAfterQuarterTime
* @Description: 获取当前时间往后最近的时刻(00,15,30,45)
* @param time : 需要推算的时间
*/
public static Date getAfterQuarterTime(Date time) {
LocalDateTime localDateTime = time.toInstant().atOffset(ZoneOffset.ofHours(8)).toLocalDateTime();
int count;
if (localDateTime.getMinute() % 15 == 0) {
count = localDateTime.getMinute() / 15;
} else {
count = localDateTime.getMinute() / 15 + 1;
}
LocalDateTime lastQuarter = localDateTime.truncatedTo(ChronoUnit.HOURS)
.plusMinutes(15 * count);
return Date.from(Instant.ofEpochSecond(lastQuarter.toEpochSecond(ZoneOffset.ofHours(8))));
}
/*
* @Title: time96Points
* @Description: 时间段分成 96 个点
* @param startTime : 开始时间
* @param endTime : 结束时间
*/
public static List<Date> time96Points(Date startTime, Date endTime) {
List<Date> quarterTimes = new ArrayList<>();
while (startTime.getTime() < endTime.getTime()) {
quarterTimes.add(startTime);
startTime = DateUtil.addMinute(startTime, 15);
}
return quarterTimes;
}
}