LocalDateTimeUtils.java 5.71 KB
package vc.thinker.utils;

import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;

/**
 * @author : xieshaojun
 * @date : 2023/1/3 17:55
 */
@Slf4j
public class LocalDateTimeUtils {
    /**
     * 默认时区
     */
    private static final ZoneId SYSTEM_ZONE_ID = ZoneId.systemDefault();


    /**
     * LocalDateTime转换Date
     *
     * @param localDateTime
     * @return
     */
    public static Date toDate(final LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(SYSTEM_ZONE_ID).toInstant());
    }

    /**
     * Date转换LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime toLocalDateTime(final Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), SYSTEM_ZONE_ID);
    }

    /**
     * 获取一天的开始
     *
     * @return LocalDateTime
     */
    public static LocalDateTime getTheStartOfTheDay() {
        return LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
    }

    /**
     * 获取一天的结束
     *
     * @return LocalDateTime
     */
    public static LocalDateTime getTheEndOfTheDay() {
        return LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).withNano(0);
    }

    /**
     * 设置一天的开始
     *
     * @param localDateTime
     * @return LocalDateTime
     */
    public static LocalDateTime setTheStartOfTheDay(final LocalDateTime localDateTime) {
        return localDateTime.withHour(0).withMinute(0).withSecond(0).withNano(0);
    }

    /**
     * 设置一天的结束
     *
     * @param localDateTime
     * @return LocalDateTime
     */
    public static LocalDateTime setTheEndOfTheDay(final LocalDateTime localDateTime) {
        return localDateTime.withHour(23).withMinute(59).withSecond(59).withNano(0);
    }

    /**
     * 设置一天的开始
     *
     * @param date
     * @return Date
     */
    public static Date setTheStartOfTheDay(final Date date) {
        return toDate(setTheStartOfTheDay(toLocalDateTime(date)));
    }

    /**
     * 设置一天的结束
     *
     * @param date
     * @return Date
     */
    public static Date setTheEndOfTheDay(final Date date) {
        return toDate(setTheEndOfTheDay(toLocalDateTime(date)));
    }

    /**
     * 填满时间的月
     */
    public static Date fillMonth(final Date date) {
        return toDate(toLocalDateTime(date).withMonth(12));
    }

    /**
     * 填满时间的日
     */
    public static Date fillDay(final Date date) {
        return toDate(toLocalDateTime(date).with(TemporalAdjusters.lastDayOfMonth()));
    }


    /**
     * 填满时间的月
     */
    public static LocalDateTime fillMonth(final LocalDateTime date) {
        return date.withMonth(12);
    }

    /**
     * 填满时间的日
     */
    public static LocalDateTime fillDay(final LocalDateTime date) {
        return date.with(TemporalAdjusters.lastDayOfMonth());
    }


    /**
     * 测试方法
     *
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(intervalDay( LocalDateTime.of(2017, 8, 5, 00, 00),  LocalDateTime.of(2019, 8, 6, 00, 00)));
    }


    /**
     * 将LocalDateTime转为timestamp
     *
     * @param localDateTime
     * @return
     */
    public static long parseToTimestamp(LocalDateTime localDateTime) {
        return localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }



    /**
     * 设置时间的月的开始
     *
     * @param localDateTime
     * @return LocalDateTime
     */
    public static LocalDateTime setTheStartOfTheMonth(final LocalDateTime localDateTime) {
        return setTheStartOfTheDay(localDateTime).withDayOfMonth(1);
    }

    /**
     * 设置时间的月的结束
     *
     * @param localDateTime
     * @return LocalDateTime
     */
    public static LocalDateTime setTheEndOfTheMonth(final LocalDateTime localDateTime) {
        return setTheEndOfTheDay(localDateTime).withDayOfMonth(1).plusMonths(1).minusDays(1);
    }

    /**
     * 设置时间的年的开始
     *
     * @param localDateTime
     * @return LocalDateTime
     */
    public static LocalDateTime setTheStartOfTheYear(final LocalDateTime localDateTime) {
        return setTheStartOfTheMonth(localDateTime.withMonth(1));
    }

    /**
     * 设置时间的年的结束
     *
     * @param localDateTime
     * @return LocalDateTime
     */
    public static LocalDateTime setTheEndOfTheYear(final LocalDateTime localDateTime) {
        return setTheEndOfTheMonth(localDateTime.withMonth(12));
    }



    /**
     * 两个时间间隔的毫秒数
     *
     * @param subtractedTimestamp 被减时间
     * @param subtractTimestamp   减时间
     * @return 时间戳差值
     */
    public static long intervalTimestamp(LocalDateTime subtractedTimestamp, LocalDateTime subtractTimestamp) {
        return parseToTimestamp(subtractedTimestamp) - parseToTimestamp(subtractTimestamp);
    }

    /**
     * 两个时间间隔的分钟
     *
     * @param subtractedTimestamp 被减时间
     * @param subtractTimestamp   减时间
     * @return 分钟差值
     */
    public static long intervalMinute(LocalDateTime subtractedTimestamp, LocalDateTime subtractTimestamp) {
        return intervalTimestamp(subtractedTimestamp, subtractTimestamp) / 1000 / 60;
    }

    /**
     * 两个时间间隔的分钟
     *
     * @param subtractedTimestamp 被减时间
     * @param subtractTimestamp   减时间
     * @return 分钟差值
     */
    public static long intervalDay(LocalDateTime subtractedTimestamp, LocalDateTime subtractTimestamp) {
        return intervalMinute(subtractedTimestamp, subtractTimestamp) / 60 / 24;
    }

}