前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LocalDateTime、Date时间工具类

LocalDateTime、Date时间工具类

作者头像
CBeann
发布2023-12-25 17:53:17
1780
发布2023-12-25 17:53:17
举报
文章被收录于专栏:CBeann的博客CBeann的博客

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的属性,先测试好在用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LocalDateTime工具类
    • 方式1
      • 方式2
      • Date工具类
        • 方式1
          • 方式2
          • 注意
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档