import java.time.Clock;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Period;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
* 时间工具类
*
* @author Wtao
*/
public class DateUtils {
public static String YYYY = "yyyy";
public static String YYYY_MM = "yyyy-MM";
public static String YYYY_MM_DD = "yyyy-MM-dd";
/**
* yyyyMMddHHmmss
*/
public static final DateTimeFormatter formatter_DateTimestamp = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
/**
* yyyy-MM-dd HH:mm:ss
*/
public static final DateTimeFormatter formatter_DateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static final DateTimeFormatter formatter_Date = DateTimeFormatter.ofPattern("yyyy-MM-dd");
/**
* 获取当前日期
*
* @return
*/
public static LocalDate getLocalDate() {
return LocalDate.now();
}
/**
* 获取当前时间
*
* @return
*/
public static LocalTime getLocalTime() {
return LocalTime.now();
}
/**
* 获取当前日期时间
*
* @return
*/
public static LocalDateTime getLocalDateTime() {
return LocalDateTime.now();
}
/**
* 获取当前的微秒数
*
* @return
*/
public static long getClockMillis() {
Clock clock = Clock.systemDefaultZone();
return clock.millis();
}
/**
* 返回当前时间yyyyMMddHHmmss
*
* @return
*/
public static String getDateTimestamp() {
return getLocalDateTime().format(formatter_DateTimestamp);
}
/**
* 返回当前时间yyyy-MM-dd
*
* @return
*/
public static String getDate() {
return getLocalDate().format(DateTimeFormatter.ISO_LOCAL_DATE);
}
/**
* 返回当前系统时间 yyyy-MM-dd HH:mm:ss
*
* @return 返回当前系统时间
*/
public static String getDateTime() {
return getLocalDateTime().format(formatter_DateTime);
}
/**
* 获取当月第一天 yyyy-MM-dd
*
* @return
*/
public static String getFirstDayOfMonth() {
return getLocalDate().withDayOfMonth(1).format(DateTimeFormatter.ISO_LOCAL_DATE);
}
/**
* 获取本月最后一天 yyyy-MM-dd
*
* @return
*/
public static String getLastDayOfMonth() {
LocalDate localDate = getLocalDate();
return localDate.withDayOfMonth(localDate.lengthOfMonth()).format(DateTimeFormatter.ISO_LOCAL_DATE);
}
/**
* 将yyyyMMddHHmmss转为 yyyy-MM-dd HH:mm:ss
*
* @param dateTimestamp
* @return
*/
public static String formatDateTimestamp(String dateTimestamp) {
return LocalDateTime.parse(dateTimestamp, formatter_DateTimestamp).format(formatter_DateTime);
}
/**
* 将yyyy-MM-dd HH:mm:ss转为 yyyyMMddHHmmss
*/
public static String formatDateTime(String dateTime) {
return parseLocalDateTime(dateTime).format(formatter_DateTimestamp);
}
/**
* 将yyyy-MM-dd HH:mm:ss转为 LocalDateTime
*/
public static LocalDateTime parseLocalDateTime(String dateTime) {
return LocalDateTime.parse(dateTime, formatter_DateTime);
}
/**
* 将yyyyMMddHHmmss转为 LocalDateTime
*/
public static LocalDateTime parseLocalDateTimestamp(String dateTimestamp) {
return LocalDateTime.parse(dateTimestamp, formatter_DateTimestamp);
}
/**
* yyyy-MM-dd字符串转LocalDate
*
* @param dateString
* @return
*/
public static LocalDate parseLocalDate(String dateString) {
return LocalDate.parse(dateString, DateTimeFormatter.ISO_LOCAL_DATE);
}
/**
* yyyy-MM-dd 增加日期
*
* @param date
* @param days
* @return
*/
public static String plusDays(String date, int days) {
LocalDate localDate = parseLocalDate(date);
return localDate.plusDays(days).format(DateTimeFormatter.ISO_LOCAL_DATE);
}
public static LocalDateTime dateToLocalDateTime (Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return instant.atZone(zoneId).toLocalDateTime();
}
/**
*
* <p>描述</p>
*
* @param date
* @param days
* @return
*/
public static String plusHour(Date date, int hours) {
return dateToLocalDateTime(date).plusHours(hours).format(DateTimeFormatter.ISO_LOCAL_DATE);
}
/**
* 计算两个日期之间相差的天数
*
* @param startDate 较小的时间 yyyy-MM-dd
* @param endDate 较大的时间 yyyy-MM-dd
* @return 相差天数
*/
public static int dateCompareTo(String startDate, String endDate) {
LocalDate startLocalDate = LocalDate.parse(startDate, DateTimeFormatter.ISO_LOCAL_DATE);
LocalDate endLocalDate = LocalDate.parse(endDate, DateTimeFormatter.ISO_LOCAL_DATE);
Period period = Period.between(startLocalDate, endLocalDate);
return period.getDays();
}
/**
* @param setDate 指定日期(yyyy-MM-dd格式)
* @return 当前日期大:true 指定日期大:false
* @author: Wtao By 2018年9月11日
* @Description 比较当前日期和指定日期
*/
public static Boolean isAfter(String setDate) {
LocalDate nowTime = LocalDate.now();
LocalDate endTime = LocalDate.parse(setDate, DateTimeFormatter.ofPattern(YYYY_MM_DD));
return nowTime.isAfter(endTime);
}
/**
* @param date
* @return
* @author: Wtao By 2018年9月11日
* @Description Date 转成 LocalDate
*/
public static LocalDate dateToLocalDate(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
// atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
return instant.atZone(zoneId).toLocalDate();
}
/**
* @param localDate
* @return
* @author: Wtao By 2018年9月11日
* @Description LocalDate 转 Date
*/
public static Date localDateToDate(LocalDate localDate) {
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
return Date.from(zdt.toInstant());
}
/**
* @param date1
* @param date2 yyyy-MM-dd格式
* @return date1 大 ->true
* date2 大 ->false
* @author: Wtao By 2018年9月11日
* @Description 比较两个时间大小
*/
public static boolean compare(Date date1, String date2) {
LocalDate localDate1 = dateToLocalDate(date1);
LocalDate localDate2 = LocalDate.parse(date2, DateTimeFormatter.ISO_LOCAL_DATE);
return localDate1.isAfter(localDate2);
}
public static String dateToStr(Date date) {
if (date == null) {
return "";
}
return dateToLocalDate(date).format(formatter_Date);
}
/**
*
* <p>描述 获取当前日期到指定日期相差的天数</p>
*
* @param date 指定日期
*/
public static Long NumberOfDaysDifference(String date) {
LocalDate st = parseLocalDate(date);
LocalDate end = getLocalDate();
return end.toEpochDay()-st.toEpochDay() + 1;
}
}
工具类-日期
最新推荐文章于 2024-01-17 22:30:28 发布