import java.math.BigDecimal;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
/**
-
基于JDK 1.8 日期API
-
@Author: xingchen
-
@ClassName: DateUtils
-
@Date: 2018/12/10下午2:21
-
@Description:
*/
public class DateUtils {
private static String YYYYMMDDHHMMSS = “yyyy-MM-dd HH:mm:ss”;
private static String YYYYMMDD = “yyyy-MM-dd”;
private static String YYYYMM = “yyyy-MM”;/**
- 将日期转为字符串 yyyy-mm-dd HH:mm:ss
- @param date
- @return
*/
public static String getYYYYMMDDHHMMSS(Date date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYYMMDDHHMMSS);
LocalDateTime localDateTime = dateToDateTime(date);
return formatter.format(localDateTime);
}
/**
- 将字符串转为日期
- @param date
- @return
*/
public static Date getDate(String date) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(YYYYMMDDHHMMSS);
LocalDateTime localDateTime = LocalDateTime.parse(date, dateTimeFormatter);
return dateTimeToDate(localDateTime);
}
/**
- 将字符串转为日期
- @param date
- @return
*/
public static Date getDate(String date, String pattern) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime localDateTime = LocalDateTime.parse(date, dateTimeFormatter);
return dateTimeToDate(localDateTime);
}
/**
- LocalDateTime 和DateTime 互转
- @param date
- @return
*/
public static LocalDateTime dateToDateTime(Date date) {
Instant instant = date.toInstant();
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
}
public static Date dateTimeToDate(LocalDateTime localDateTime) {
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
return date;
}/**
- date 转LocalDate
- @param date
- @return
*/
public static LocalDate dateToLocalDate(Date date) {
Instant instant = date.toInstant();
LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
return localDate;
}
/**
- date 转LocalDate
- @param localDate
- @return
*/
public static Date localToDate(LocalDate localDate) {
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
return date;
}
/**
- date 转DateTime
- @param date
- @return
*/
public static LocalTime dateToLocalTime(Date date) {
Instant instant = date.toInstant();
LocalTime localTime = instant.atZone(ZoneId.systemDefault()).toLocalTime();
return localTime;
}
/**
- date 转LocalTime
- @param localTime
- @return
*/
public static Date localToDate(LocalTime localTime) {
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
java.util.Date date = Date.from(instant);
return date;
}
/**
- 将日期转为字符串 yyyy-mm-dd
- @param date
- @return
*/
public static String getYYYYMMDD(Date date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYYMMDD);
LocalDateTime localDateTime = dateToDateTime(date);
return formatter.format(localDateTime);
}
/**
- 将日期转为字符串 yyyy-mm-dd
- @param date
- @return
*/
public static String getYYYYMM(Date date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYYMM);
LocalDateTime localDateTime = dateToDateTime(date);
return formatter.format(localDateTime);
}
/**
- 获取当前时间之后的某一天的最小时间
- @param date
- @return
*/
public static Date afterXDateTimeMIN(Date date, int after) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.plusDays(after);
localDateTime = localDateTime.with(LocalTime.MIN);
return dateTimeToDate(localDateTime);
}
/**
- 获取当前时间之后的某一天的最大时间
- @param date
- @return
*/
public static Date afterXDateTimeMAX(Date date, int after) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.plusDays(after);
localDateTime = localDateTime.with(LocalTime.MAX);
return dateTimeToDate(localDateTime);
}
/**
- 获取当前时间之前的某一天的最小时间
- @param date
- @return
*/
public static Date beforeXDateTimeMIN(Date date, int before) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.minusDays(before);
localDateTime = localDateTime.with(LocalTime.MIN);
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
- 获取当前时间之前的某一天的最大时间
- @param date
- @return
*/
public static Date beforeXDateTimeMAX(Date date, int before) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.minusDays(before);
localDateTime = localDateTime.with(LocalTime.MAX);
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
- 获取本月的第一天 00:00:00
- @return
*/
public static Date currentFirstDayOfMonth() {
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
return dateTimeToDate(localDateTime);
}
/**
- 获取传入时间月份的最后一天
- @return
*/
public static Date currentXDayOfMonth(Date date) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
return dateTimeToDate(localDateTime);
}
/**
- 所选date的月份的第一天
- @return
*/
public static Date beforeXFirstDayOfMonth(Date date) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
return dateTimeToDate(localDateTime);
}
/**
- 获取前几个月的1号0点 00:00:00
- @return
*/
public static Date preXDayOfMonthMIN(int month) {
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime = localDateTime.minusMonths(month);
localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
return dateTimeToDate(localDateTime);
}
/**
- 获取前几个月的1号0点 00:00:00
- @return
*/
public static Date preXDayOfMonthMIN(Date date, int month) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.minusMonths(month);
localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
return dateTimeToDate(localDateTime);
}
/**
- 传入时间的的前几个月的时间
- @return
*/
public static Date preXDayOfMonth(Date date, int month) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.minusMonths(month);
return dateTimeToDate(localDateTime);
}
/**
- 传入时间的的前几个月的时间
- @return
*/
public static Date afterXDayOfMonth(Date date, int month) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.plusMonths(month);
return dateTimeToDate(localDateTime);
}
/**
- 获取前几个月的最后一天23:59:59
- @return
*/
public static Date preXDayOfMonthMAX(int month) {
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime = localDateTime.minusMonths(month);
localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
return dateTimeToDate(localDateTime);
}
/**
- 获取某个时间几个月的最后一天23:59:59
- @return
*/
public static Date preXDayOfMonthMAX(Date date, int month) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.minusMonths(month);
localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
return dateTimeToDate(localDateTime);
}
/**
- 两个日期相差多少个月
- @param date1
- @param date2
- @return
*/
public static Long getUntilMonth(Date date1, Date date2) {
LocalDate localDate1 = dateToLocalDate(date1);
LocalDate localDate2 = dateToLocalDate(date2);
return ChronoUnit.MONTHS.between(localDate1, localDate2);
}
/**
- 两个日期相差多少天
- @param date1
- @param date2
- @return
*/
public static Long getUntilDay(Date date1, Date date2) {
LocalDate localDate1 = dateToLocalDate(date1);
LocalDate localDate2 = dateToLocalDate(date2);
return ChronoUnit.DAYS.between(localDate1, localDate2);
}
/**
- 两个日期相差多少小时
- @param date1
- @param date2
- @return
*/
public static Long getUntilHours(Date date1, Date date2) {
LocalDateTime localDate1 = dateToDateTime(date1);
LocalDateTime localDate2 = dateToDateTime(date2);
Long senonds = Duration.between(localDate1, localDate2).get(ChronoUnit.SECONDS);
return senonds / 3600;
}
/**
- 两个日期相差多少小时 double 约等于
- @param date1
- @param date2
- @return
*/
public static double getUntilHoursByDouble(Date date1, Date date2) {
LocalDateTime localDate1 = dateToDateTime(date1);
LocalDateTime localDate2 = dateToDateTime(date2);
Long seconds = Duration.between(localDate1, localDate2).get(ChronoUnit.SECONDS);
BigDecimal secondss = BigDecimal.valueOf(seconds);
BigDecimal hours = secondss.divide(BigDecimal.valueOf(3600), 2, BigDecimal.ROUND_HALF_UP);
return hours.doubleValue();
}
/**
- 两个日期相差多少秒
- @param date1
- @param date2
- @return
*/
public static Long getUntilSecond(Date date1, Date date2) {
LocalDateTime localDate1 = dateToDateTime(date1);
LocalDateTime localDate2 = dateToDateTime(date2);
return Duration.between(localDate1, localDate2).get(ChronoUnit.SECONDS);
}
public static void main(String args[]) {
//LocalDateTime localDateTime = LocalDateTime.now();System.out.println(getYYYYMMDDHHMMSS(currentXDayOfMonth(new Date())));
}
/**
- 当前时间23:59:59
- @param date
- @return
*/
public static Date currentMax(Date date) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.with(LocalTime.MAX);
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
- 当前时间00:00:00
- @param date
- @return
*/
public static Date currentMin(Date date) {
LocalDateTime localDateTime = dateToDateTime(date);
localDateTime = localDateTime.with(LocalTime.MIN);
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
}