关于DateUtil时间的获取
//获取到第二天凌晨的时间戳
public static Date getEndData() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.add(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
//取到最近的整点半时间 如11:32 得到11:00 11:12
public static Date getStartHalfTime() {
Calendar ca = Calendar.getInstance();
if (ca.get(Calendar.MINUTE) < 30) {
ca.set(Calendar.MINUTE, ca.get(Calendar.MINUTE) < 30 ? 30 : 00);
ca.set(Calendar.SECOND, 0);
ca.set(Calendar.HOUR_OF_DAY, ca.get(Calendar.HOUR_OF_DAY) - 1);
return ca.getTime();
} else {
ca.set(Calendar.MINUTE, ca.get(Calendar.MINUTE) < 30 ? 30 : 00);
ca.set(Calendar.SECOND, 0);
ca.set(Calendar.HOUR_OF_DAY, ca.get(Calendar.HOUR_OF_DAY));
return ca.getTime();
}
}
//获取到当前时间整数 如 11:12 获得11:30 11:31获的12:00
public static Date getStartHalfTestTime() {
Date end = getHalfendDate();
return end;
}
//取到最近的整点半时间 如11:32 11:30 或 11:12 11:00
public static Date getEndHalfDate() {
Calendar ca = Calendar.getInstance();
ca.set(Calendar.MINUTE, ca.get(Calendar.MINUTE) < 30 ? 00 : 30);
ca.set(Calendar.SECOND, 0);
return ca.getTime();
}
//取到最近的整点时间 如11:02 得到11:00
public static Date getStartTestDate() {
Calendar ca = Calendar.getInstance();
ca.set(Calendar.MINUTE, 00);
ca.set(Calendar.SECOND, 0);
return ca.getTime();
}
//取到最近的整点时间如11:02 得到12:00
public static Date getEndTestDate() {
Calendar ca = Calendar.getInstance();
ca.set(Calendar.MINUTE, 60);
ca.set(Calendar.SECOND, 0);
return ca.getTime();
}
//获的一个整点的 开始时间和结束时间 相差一小时 如11:02 开始时间11:00 结束时间12:00
public static Pair<String, String> getTestStartDate(Date periodStart, Date periodEnd) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
log.debug("活动开始时间"+formatter.format(periodStart));
log.debug("活动结束时间"+formatter.format(periodEnd));
Date startDate = getStartTestDate();
Date endDate = getEndTestDate();
Date startTime = periodStart.getTime() > startDate.getTime() ? periodStart : startDate;
Date endTime = periodEnd.getTime() > endDate.getTime() ? endDate : periodEnd;
if(startTime.getTime()>endTime.getTime()){
startTime = periodStart;
}
return Pair.of(formatter.format(startTime), formatter.format(endTime));
}
//获的一个整点的 开始时间和结束时间 相差一小时 如11:02 开始时间10:00 结束时间11:00
public static Pair<String, String> getTestEndDate(Date periodStart, Date periodEnd) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = getStartTestHalfTime();
Date endDate = getEndTestHalfTime();
Date startTime = periodStart.getTime() > startDate.getTime() ? periodStart : startDate;
Date endTime = periodEnd.getTime() > endDate.getTime() ? endDate : periodEnd;
return Pair.of(formatter.format(startTime), formatter.format(endTime));
}
//取到最近的整点 如11:32 得到10:00
public static Date getStartTestHalfTime() {
Calendar ca = Calendar.getInstance();
ca.set(Calendar.MINUTE, 00);
ca.set(Calendar.SECOND, 0);
ca.set(Calendar.HOUR_OF_DAY, ca.get(Calendar.HOUR_OF_DAY) - 1);
return ca.getTime();
}
//取到最近的整点 如11:32 得到10:00
public static Date getEndTestHalfTime() {
Calendar ca = Calendar.getInstance();
ca.set(Calendar.MINUTE, 00);
ca.set(Calendar.SECOND, 0);
ca.set(Calendar.HOUR_OF_DAY, ca.get(Calendar.HOUR_OF_DAY));
return ca.getTime();
}
//取到最近的整点半时间 如11:32 得到11:00 和11:30 或 11:12 得到 10:30 和11:00 如果比开始时间小的话查询开始时间,如果大的话,取结束时间
public static Pair<String, String> queryHourName(Date periodStart, Date periodEnd) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start = getStartHalfTime();
Date end = getEndHalfDate();
String startTime;
String endTime;
if (start.getTime() > periodStart.getTime()) {
startTime = formatter.format(start);
} else {
startTime = formatter.format(periodStart);
}
if (end.getTime() < periodEnd.getTime()) {
endTime = formatter.format(end);
} else {
endTime = formatter.format(periodEnd);
}
System.out.println("startTime = " + startTime);
log.debug("查询时间startTime =" + startTime + " endTime =" + endTime);
return Pair.of(startTime, endTime);
}
//获取到今天凌晨和现在时间的整点 如结尾时间为11:31 获得11:30 12:00
public static Pair<String, String> getEndHalfDate(Date periodStart, Date periodEnd) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//11:31 得到11:30
Date date1 = getEndHalfDate();
//11:31 获得12:00
Date end = getHalfendDate();
Date startTime = periodStart.getTime() < date1.getTime() ? date1 : periodStart;
Date endTime = periodEnd.getTime() > end.getTime() ? end : periodEnd;
return Pair.of(formatter.format(startTime), formatter.format(endTime));
}
//获取到当前时间的整点 如11:02 得到11:30
public static Date getHalfendDate() {
//当前系统时间
Calendar ca = Calendar.getInstance();
System.out.println("ca.get(Calendar.MINUTE) =" + ca.get(Calendar.MINUTE));
ca.set(Calendar.MINUTE, ca.get(Calendar.MINUTE) < 30 ? 30 : 60);
ca.set(Calendar.SECOND, 0);
return ca.getTime();
}
//获取到当天时间的23:59:59
public static Date getEndOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
//获取到当天凌晨时间的00:00:00
public static Date getStartOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
//取到当前时间的00:00:00 和23:59:59 如果比开始时间小的话查询开始时间,如果大的话,取结束时间
public static Pair<String, String> getOneDay(Date periodStart, Date periodEnd) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
Date startDate = getStartOfDay(date);
Date endDate = getEndOfDay(date);
Date startTime = periodStart.getTime() > startDate.getTime() ? periodStart : startDate;
Date endTime = periodEnd.getTime() > endDate.getTime() ? endDate : periodEnd;
return Pair.of(formatter.format(startTime), formatter.format(endTime));
}
//取到昨天的00:00:00 23:59:59 如1:01 得到昨天的00:00:00和23:59:59 如果开始时间和结束时间是同一天的话就获取到当前时间的开始时间和结束时间
public static Pair<String, String> getFutureDate(Date periodStart, Date periodEnd) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//得到昨天的现在时间
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date nowTime = cal.getTime();
System.err.println("nowTime =" + nowTime);
Date startDate = getStartOfDay(nowTime);
//昨天的23:59:59
Date endDate = getEndOfDay(nowTime);
Date startTime = periodStart.getTime() > startDate.getTime() ? periodStart : startDate;
Date endTime;
if (startTime.getTime() > endDate.getTime()) {
endTime = periodEnd;
} else {
endTime = periodEnd.getTime() > endDate.getTime() ? endDate : periodEnd;
}
return Pair.of(formatter.format(startTime), formatter.format(endTime));
}
public static void main(String[] args) {
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date periodStart = formatter.parse("2019-07-03 16:00:00");
Date periodEnd = formatter.parse("2019-07-03 22:00:00");
Pair<String, String> par = getTestStartDate(periodStart, periodEnd);
System.err.println(par.getFirst() + "==============>" + par.getSecond());
} catch (Exception e) {
e.printStackTrace();
}
}