JAVA 日期工具类

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);
    }

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值