import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.Date;
public class DateUtils {
/**
* Date转LocalDateTime
*/
public static LocalDateTime toLocalDateTime(Date date) {
if (date == null) {
return null;
}
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}
/**
* Date转LocalDate
*/
public static LocalDate toLocalDate(Date date) {
if (date == null) {
return null;
}
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* LocalDateTime转Date
*/
public static Date toDate(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* LocalDate转Date
*/
public static Date toDate(LocalDate localDate) {
if (localDate == null) {
return null;
}
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
/**
* String 转 Date(yyyy-MM-dd HH:mm:ss)
*/
public static Date parse(String dateStr) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, dateTimeFormatter);
return toDate(localDateTime);
}
/**
* Date转String(yyyy-MM-dd HH:mm:ss)
*/
public static String format(Date date) {
LocalDateTime localDateTime = toLocalDateTime(date);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return localDateTime.format(dateTimeFormatter);
}
/**
* 获取日期所在年的第一天
*
* @param date 日期
* @return 日期所在年的第一天
*/
public static Date getFirstDayOfYear(Date date) {
LocalDate localDate = toLocalDate(date);
LocalDate firstDayOfYear = localDate.with(TemporalAdjusters.firstDayOfYear());
return toDate(firstDayOfYear);
}
/**
* 获取日期所在年最后一天
*
* @param date 日期
* @return 日期所在年最后一天
*/
public static Date getLastDayOfYear(Date date) {
LocalDate localDate = toLocalDate(date);
LocalDate lastDayOfYear = localDate.with(TemporalAdjusters.lastDayOfYear());
return toDate(lastDayOfYear);
}
/**
* 获取日期所在月第一天
*
* @param date 日期
* @return 日期所在月第一天
*/
public static Date getFirstDayOfMonth(Date date) {
LocalDate localDate = toLocalDate(date);
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
return toDate(firstDayOfMonth);
}
/**
* 获取日期所在月最后一天
*
* @param date 日期
* @return 日期所在月最后一天
*/
public static Date getLastDayOfMonth(Date date) {
LocalDate localDate = toLocalDate(date);
LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
return toDate(lastDayOfMonth);
}
/**
* 获取日期所在周的第一天
*
* @param date 日期
* @return 日期所在周的第一天
*/
public static Date getFirstDayOfWeek(Date date) {
LocalDate localDate = toLocalDate(date);
LocalDate firstDayOfWeek = localDate.with(DayOfWeek.MONDAY);
return toDate(firstDayOfWeek);
}
/**
* 获取日期所在周的最后一天
*
* @param date 日期
* @return 日期所在周的最后一天
*/
public static Date getLastDayOfWeek(Date date) {
LocalDate localDate = toLocalDate(date);
LocalDate lastDayOfWeek = localDate.with(DayOfWeek.SUNDAY);
return toDate(lastDayOfWeek);
}
/**
* 获取日期是一年中的第几天
*
* @param date 日期
* @return 日期是一年中的第几天
*/
public static int getDayOfYear(Date date) {
LocalDate localDate = toLocalDate(date);
return localDate.getDayOfYear();
}
/**
* 获取日期是一个月中的第几天
*
* @param date 日期
* @return 日期是一个月中的第几天
*/
public static int getDayOfMonth(Date date) {
LocalDate localDate = toLocalDate(date);
return localDate.getDayOfMonth();
}
/**
* 获取日期是一周中的第几天
*
* @param date 日期
* @return 日期是一周中的第几天
*/
public static int getDayOfWeek(Date date) {
LocalDate localDate = toLocalDate(date);
return localDate.getDayOfWeek().getValue();
}
/**
* 获取年份
*
* @param date 日期
* @return 年份
*/
public static int getYear(Date date) {
LocalDate localDate = toLocalDate(date);
return localDate.getYear();
}
/**
* 获取月份
*
* @param date 日期
* @return 月份
*/
public static int getMonth(Date date) {
LocalDate localDate = toLocalDate(date);
return localDate.getMonthValue();
}
/**
* 获取日期是一年中的第几周
*
* @param date 日期
* @return 一年中的第几周
*/
public static int getWeek(Date date) {
LocalDate localDate = toLocalDate(date);
WeekFields weekFields = WeekFields.ISO;
return localDate.get(weekFields.weekOfYear());
}
/**
* 获取时间一天中的开始时间
*
* @param date 时间
* @return 一天中的开始时间
*/
public static Date getStartOfDay(Date date) {
LocalDateTime startOfDay = toLocalDateTime(date).with(LocalTime.MIN);
return toDate(startOfDay);
}
/**
* 获取时间一天中的结束时间
*
* @param date 时间
* @return 一天中的结束时间
*/
public static Date getEndOfDay(Date date) {
LocalDateTime endOfDay = toLocalDateTime(date).with(LocalTime.MAX);
return toDate(endOfDay);
}
}
JAVA 日期工具类
最新推荐文章于 2023-02-16 11:17:50 发布