LocalDateTime、Date时间工具类

2023-12-25 17:53:17 浏览数 (1)

LocalDateTime工具类

方式1

这种官方的工具类挺不错,就是要看文档找,推荐这种工具包

代码语言:javascript复制
 <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.2.3</version>
        </dependency>

参考文档:Hutool参考文档

方式2

时间相关的基本操作,没有处理异常,自己注意

代码语言:javascript复制
package untils;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;

/**
 * @author CBeann
 * @create 2020-06-04 14:52
 */
public class LocalDateTimeUtils {
    //默认使用系统当前时区
    private static final ZoneId ZONE = ZoneId.systemDefault();


    /**
     * 转换格式1:通用转换格式:yyyy-MM-dd HH:mm:ss
     */
    public static final String YYYY_MM_DD_HH_MM_SS_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 转换格式2:年-月-日
     */
    public static final String YYYY_MMDD_PATTERN = "yyyy-MM-dd";


    //---------------->Local* fromat to String

    /**
     * @param format 获取的当前LocalDateTime并且格式化
     * @return
     */
    public static String NowLocalDateTimeByFormat(String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        LocalDateTime now = LocalDateTime.now();
        return now.format(dateTimeFormatter);
    }

    /**
     * @param format 把LocalDateTime并且格式化
     * @return
     */
    public static String LocalDateTimeByFormat(LocalDateTime localDateTime, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return localDateTime.format(dateTimeFormatter);
    }

    /**
     * @param format 把LocalDate并且格式化
     * @return
     */
    public static String LocalDateByFormat(LocalDate localDate, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return localDate.format(dateTimeFormatter);
    }


    //---------------->Date to Local*

    /**
     * 将Date转换成LocalDateTime
     *
     * @param d date
     * @return
     */
    public static LocalDateTime dateToLocalDateTime(Date d) {
        Instant instant = d.toInstant();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZONE);
        return localDateTime;
    }


    /**
     * 将Date转换成LocalDate
     *
     * @param d date
     * @return
     */
    public static LocalDate dateToLocalDate(Date d) {
        Instant instant = d.toInstant();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZONE);
        return localDateTime.toLocalDate();
    }

    /**
     * 将Date转换成LocalTime
     *
     * @param d date
     * @return
     */
    public static LocalTime dateToLocalTime(Date d) {
        Instant instant = d.toInstant();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZONE);
        return localDateTime.toLocalTime();
    }


    //---------------->Local* to date

    /**
     * 将LocalDate转换成Date
     *
     * @param localDate
     * @return date
     */
    public static Date localDateToDate(LocalDate localDate) {
        Instant instant = localDate.atStartOfDay().atZone(ZONE).toInstant();
        return Date.from(instant);
    }

    /**
     * 将LocalDateTime转换成Date
     *
     * @param localDateTime
     * @return date
     */
    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        Instant instant = localDateTime.atZone(ZONE).toInstant();
        return Date.from(instant);
    }


    //---------------->string to Local*


    /**
     * 将相应格式yyyy-MM-dd的字符串转化为LocalDate
     *
     * @param time   string
     * @param format string
     * @return date
     */
    public static LocalDate stringToLocalDate(String time, String format) {
        DateTimeFormatter f = DateTimeFormatter.ofPattern(format);
        if (YYYY_MMDD_PATTERN.equals(format)) {
            return LocalDate.parse(time, f);
        }
        return null;
    }

    /**
     * 将相应格式yyyy-MM-dd HH:mm:ss 的字符串转化为 LocalDateTime
     *
     * @param time   string
     * @param format string
     * @return date
     */
    public static LocalDateTime stringToLocalDateTime(String time, String format) {
        DateTimeFormatter f = DateTimeFormatter.ofPattern(format);
        if (YYYY_MM_DD_HH_MM_SS_PATTERN.equals(format)) {
            return LocalDateTime.parse(time, f);
        }
        return null;
    }


    //---------------->getBefore LocalDateTime

    /**
     * before 参数小于0
     * after 大于0
     * =0 表示不大不小
     *
     * @param localDateTime
     * @param year
     * @param month
     * @param day
     * @param hour
     * @param minute
     * @param sencod
     * @return
     */
    public static LocalDateTime getBeforeOrAfterLocalDateTime(LocalDateTime localDateTime, int year, int month, int day, int hour, int minute, int sencod) {

        if (year != 0) {

            localDateTime = localDateTime.plusYears(year);


        }
        if (month != 0) {
            localDateTime = localDateTime.plusMonths(month);
        }
        if (day != 0) {
            localDateTime = localDateTime.plusDays(day);

        }
        if (hour != 0) {

            localDateTime = localDateTime.plusHours(hour);

        }
        if (minute != 0) {
            localDateTime = localDateTime.plusMinutes(minute);
        }
        if (sencod != 0) {
            localDateTime = localDateTime.plusSeconds(sencod);
        }

        return localDateTime;

    }


    /**
     * 获得LocalDateTime这个月的的第一天
     * @return
     */
    LocalDateTime getMonthFirstday(LocalDateTime localDateTime) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDateTime date = localDateTime;
        LocalDateTime firstday = date.with(TemporalAdjusters.firstDayOfMonth());
        return firstday;
    }

    /**
     * 获得LocalDateTime这个月的最后一天
     * @return
     */
    LocalDateTime getMonthLastday(LocalDateTime localDateTime) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDateTime date = localDateTime;
        LocalDateTime lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
        return lastDay;
    }

    /**
     * 获得Localdatetime的星期
     */
    public int  getWeekNum(LocalDateTime localDateTime){
        System.out.println("week is "   localDateTime.getDayOfWeek());
        System.out.println("week is "   localDateTime.getDayOfWeek().getValue());
        return localDateTime.getDayOfWeek().getValue();
    }


}

参考:Date、LocalTime、LocalDate、LocalDate-时间操作工具类_Hatsune_Miku_的博客-CSDN博客

Date工具类

方式1

这种官方的工具类挺不错,就是要看文档找,推荐这种工具包

代码语言:javascript复制
 <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.2.3</version>
        </dependency>

参考文档:Hutool参考文档

方式2
代码语言:javascript复制
package untils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TimeUtils {
    /**
     * 转换格式1:通用转换格式:yyyy-MM-dd HH:mm:ss
     */
    public static final String CURRENT_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 转换格式2:年-月-日
     */
    public static final String YYYYMMDD_PATTERN = "yyyy-MM-dd";

    /**
     * 星期几
     */
    private static final String weekNames[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};

    /**
     * 获取 获取格式转换器(带格式)
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月20日下午7:03:04
     */
    private static SimpleDateFormat getSimpleDateFormat(String pattern) {
        return new SimpleDateFormat(pattern);
    }

    /**
     * 获取 获取格式转换器(不带格式)
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月20日下午11:16:45
     */
    private static SimpleDateFormat getSimpleDateFormat() {
        return new SimpleDateFormat();
    }

    /**
     * 根据时间类型转为字符串类型
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月20日下午7:03:33
     */
    public static String dateFormatWithPattern(Date date, String pattern) {
        return getSimpleDateFormat(pattern).format(date);
    }

    /**
     * 根据字符串转化为日期类型
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月20日下午11:17:32
     */
    public static Date dateFormatWithPattern(String date) throws ParseException {
        return getSimpleDateFormat(CURRENT_PATTERN).parse(date);
    }

    /**
     * 根据格式将字符串转换为日期类型
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月22日下午10:41:13
     */
    public static Date dateFormatWithPatternWithPattern(String date, String pattern) throws ParseException {
        return getSimpleDateFormat(pattern).parse(date);
    }

    /**
     * 获取前n天日期的字符串
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月20日下午9:24:59
     */
    public static String getBeforeDayString(Date date, int day, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, -day);
        date = calendar.getTime();
        String dateString = getSimpleDateFormat(pattern).format(date);
        return dateString;
    }

    /**
     * 获取后n天日期的字符串
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月27日下午1:01:47
     */
    public static String getNextDayString(Date date, int day, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, day);
        date = calendar.getTime();
        String dateString = getSimpleDateFormat(pattern).format(date);
        return dateString;
    }

    /**
     * 获取当前时间的前N小时
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月20日下午11:13:20
     */
    public static String getBeforeHourDay(Date date, int hour, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, -hour);
        date = calendar.getTime();
        String dateString = getSimpleDateFormat(pattern).format(date);
        return dateString;
    }

    /**
     * 获取当前时间的后N小时
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月20日下午11:14:48
     */
    public static String getNextHourDay(Date date, int hour, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, hour);
        date = calendar.getTime();
        String dateString = getSimpleDateFormat(pattern).format(date);
        return dateString;
    }

    /**
     * 获取当前时间的前n个月
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月21日下午12:37:55
     */
    public static String getBeforeMonthDay(Date date, int n, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, -n);
        date = calendar.getTime();
        String dateString = getSimpleDateFormat(pattern).format(date);
        return dateString;
    }

    /**
     * 获取一个月的最后一天
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月21日下午1:23:06
     */
    public static String getLastDayOfMonth(Date date, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        String lastDay = getSimpleDateFormat(pattern).format(calendar.getTime());
        return lastDay;
    }

    /**
     * 获取一个月的第一天
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月21日下午1:23:06
     */
    public static String getFirstDayOfMonth(Date date, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        String lastDay = getSimpleDateFormat(pattern).format(calendar.getTime());
        return lastDay;
    }

    /**
     * 获取这一天是周几
     * <p>
     * Description:
     * </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月22日下午10:18:07
     */
    public static String getDayOfWeek(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        if (dayOfWeek < 0)
            dayOfWeek = 0;
        return weekNames[dayOfWeek];
    }

    /**
     * 判断两个日期相差得天数
     * day1:前面得天数
     * day2:后面得天数
     * <p>Description: </p>
     *
     * @author Tianyu Xiao
     * @date 2019年3月29日下午1:26:04
     */
    public static long getTwoDayDifference(String day1, String day2) throws ParseException {
        Date oDate = dateFormatWithPatternWithPattern(day1, YYYYMMDD_PATTERN);
        Date fDate = dateFormatWithPatternWithPattern(day2, YYYYMMDD_PATTERN);
        long days = (fDate.getTime() - oDate.getTime()) / (1000 * 3600 * 24);
        return days;
    }


    public static void main(String[] args) throws ParseException {
        //String res = stringDateFormat("2019-10-14-14:43:04", "yyyy-MM-dd-HH:mm:ss", "yyyy-MM-dd HH:mm:ss");
        Date date = dateFormatWithPattern("2019-12-31 14:43:04");
        System.out.println(isLastDayOfMonth(date));
    }

    /**
     * 将旧时间格式转换新时间格式
     * <p>Description: </p>
     *
     * @author Tianyu Xiao
     * @date 2019年10月21日下午2:51:09
     */
    public static String stringDateFormat(String date, String oldPattern, String newPattern) throws ParseException {
        SimpleDateFormat simpleDateFormat = getSimpleDateFormat(oldPattern);
        Date dateTime = simpleDateFormat.parse(date);
        simpleDateFormat = getSimpleDateFormat(newPattern);
        return simpleDateFormat.format(dateTime);
    }

    /**
     * 判断该日期是否是该月的第一天
     * <p>Description: </p>
     *
     * @author Tianyu Xiao
     * @date 2019年12月2日下午8:37:19
     */
    public static boolean isFirstDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        System.out.println(calendar.get(Calendar.MONTH));
        return calendar.get(Calendar.DAY_OF_MONTH) == 1;
    }

    /**
     * 判断该日期是否是该月的最后一天
     * <p>Description: </p>
     *
     * @author Tianyu Xiao
     * @date 2019年12月2日下午8:36:58
     */
    public static boolean isLastDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_MONTH) == calendar
                .getActualMaximum(Calendar.DAY_OF_MONTH);
    }

}

注意

在使用MyBatis时对象用Date合适,用LocalDateTime就出错,百度查的答案是 mybaits版本问题(我没有试),所以如果打算用LocalDateTime 作为entity的属性,先测试好在用

0 人点赞