Java localdatetime date localdate 实用的日期工具类 字符串转日期 获取两个日期包含的所有日期等等......

废话不多说,直接上代码,可以直接拷贝使用,基本都有注释说明,很容易就找到自己想要的

 

package com.rocky.fintech.boss.util;


import org.apache.commons.lang3.StringUtils;

import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author zhangyi
 * @date 2019/10/17
 */
public class DateUtils {

    public static final String FORMAT_1 = "yyyy-MM-dd";
    public static final String FORMAT_2 = "yyyy-MM-dd HH:mm:ss";
    public static final String FORMAT_3 = "yyyy-MM-dd HH:mm";

    public static final String FORMAT_4 = "yyyy年MM月dd日";

    public static final String FORMAT_5 = "yyyyMMddHHmmss";

    public static final String FORMAT_6 = "MM-dd";
    public static final String FORMAT_7 = "HH:mm";

    public static final String FORMAT_8 = "yyyyMMdd";
    public static final String FORMAT_9 = "HHmmss";

    public static final String FORMAT_10 = "yyyy";
    public static final String FORMAT_11 = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String FORMAT_12 = "yyyy-MM";

    public static final String FORMAT_13 = "HH";
    public static final String FORMAT_14 = "dd";

    public static final String FORMAT_15 = "yyyy-MM-dd HH";

    public static DateTimeFormatter DATE_FORMAT_9 = DateTimeFormatter.ofPattern("HHmmss");
    public static DateTimeFormatter DATE_FORMAT_10 = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
    public static DateTimeFormatter DATE_FORMAT_11 = DateTimeFormatter.ofPattern("MM/dd/yyyy");

    public static DateTimeFormatter DATE_FORMAT_20 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    public static DateTimeFormatter DATE_FORMAT_21 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
    public static DateTimeFormatter DATE_FORMAT_23 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static DateTimeFormatter DATE_FORMAT_24 = DateTimeFormatter.ofPattern("yyyy-MM");

    public static DateTimeFormatter DATE_FORMAT_30 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    public static DateTimeFormatter DATE_FORMAT_31 = DateTimeFormatter.ofPattern("yyyyMMdd");
    public static DateTimeFormatter DATE_FORMAT_32 = DateTimeFormatter.ofPattern("yyyyMM");

    public static DateTimeFormatter DATE_FORMAT_40 = DateTimeFormatter.ofPattern("HH:mm");

    public static DateTimeFormatter DATE_FORMAT_41 = DateTimeFormatter.ofPattern("yyyy.MM.dd");

    public static DateTimeFormatter DATE_FORMAT_42 = DateTimeFormatter.ofPattern("yyyy年MM月");

    public static DateTimeFormatter DATE_FORMAT_43 = DateTimeFormatter.ofPattern("dd-MM-yy");

    public static final DateTimeFormatter DATE_COMMON_PATTERN = DateTimeFormatter
            .ofPattern("[yyyy-MM-dd[ HH:mm:ss]][yyyyMMdd]");

    /**
     * 字符串转日期
     */
    public static LocalDate stringToDate(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        return LocalDate.parse(date, DATE_COMMON_PATTERN);
    }

    /**
     * 字符串转日期
     */
    public static LocalDateTime stringToDateTime(String date, String pattern) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        return stringToDateTime(date, DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 转时间戳
     */
    public static long getTimeStamp(LocalDateTime localDateTime) {
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        return instant.toEpochMilli();
    }

    /**
     * 字符串转日期
     */
    public static LocalDateTime stringToDateTime(String date, DateTimeFormatter formatter) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        return formatter.parse(date, temporal -> {
            LocalDate date1 = temporal.isSupported(ChronoField.EPOCH_DAY)
                    ? LocalDate.ofEpochDay(temporal.getLong(ChronoField.EPOCH_DAY))
                    : LocalDate.now();
            LocalTime time = temporal.isSupported(ChronoField.NANO_OF_DAY)
                    ? LocalTime.ofNanoOfDay(temporal.getLong(ChronoField.NANO_OF_DAY))
                    : LocalTime.MIN;
            return LocalDateTime.of(date1, time);
        });
    }

    /**
     * LocalDateTime转Date
     */
    public static Date toDate(LocalDateTime dateTime) {
        if (dateTime == null) {
            return null;
        }
        return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * LocalDate转Date
     */
    public static Date toDate(LocalDate date) {
        return Date.from(LocalDateTime.of(date, LocalTime.MIN).atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 获取当前国家当前时间
     */
    public static LocalDateTime getCountyTime(int timeDifference) {
        return LocalDateTime.now().plusHours(timeDifference);
    }

    /**
     * cs
     * 获取当前国家时间
     */
    public static LocalDateTime getCountyTime(LocalDateTime date, int timeDifference) {
        return date.plusHours(timeDifference);
    }

    /**
     * 根据出生日期获取年龄
     */
    public static int getAge(LocalDate birthDay) {
        if (birthDay == null) {
            return 0;
        }
        return birthDay.until(LocalDate.now()).getYears();
    }

    /**
     * 根据出生日期获取年龄
     */
    public static int getAge(LocalDateTime birthDay) {
        if (birthDay == null) {
            return 0;
        }
        return birthDay.toLocalDate().until(LocalDate.now()).getYears();
    }

    /**
     * 根据出生日期获取年龄
     */
    public static int getAge(String birthDay) {
        if (StringUtils.isBlank(birthDay)) {
            return 0;
        }
        LocalDate birthDayTime = LocalDate.parse(birthDay, DATE_COMMON_PATTERN);
        return birthDayTime.until(LocalDate.now()).getYears();
    }

    /**
     * 获取指定日期所在周的第一天
     */
    public static String getWeekFirstDay(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        LocalDate localDate = LocalDate.parse(date, DATE_COMMON_PATTERN);
        LocalDate day = localDate.minusDays(localDate.getDayOfWeek().getValue() - 1);
        return day.format(DATE_FORMAT_23);
    }

    /**
     * 获取指定日期所在周的第一天
     */
    public static String getWeekFirstDay(LocalDate date) {
        if (date == null) {
            return null;
        }
        LocalDate day = date.minusDays(date.getDayOfWeek().getValue() - 1);
        return day.format(DATE_FORMAT_23);
    }

    /**
     * 获取指定日期所在周的最后一天
     */
    public static String getWeekLastDay(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        LocalDate localDate = LocalDate.parse(date, DATE_COMMON_PATTERN);
        LocalDate day = localDate.plusDays(7 - localDate.getDayOfWeek().getValue());
        return day.format(DATE_FORMAT_23);
    }

    /**
     * 获取指定日期所在周的最后一天
     */
    public static String getWeekLastDay(LocalDate date) {
        if (date == null) {
            return null;
        }
        LocalDate day = date.plusDays(7 - date.getDayOfWeek().getValue());
        return day.format(DATE_FORMAT_23);
    }

    /**
     * 获取指定日期所在月的第一天
     */
    public static String getMonthFirstDate(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        LocalDate localDate = LocalDate.parse(date, DATE_COMMON_PATTERN);
        LocalDate day = localDate.with(TemporalAdjusters.firstDayOfMonth());
        return day.format(DATE_FORMAT_23);
    }

    /**
     * 获取指定日期所在月的第一天
     */
    public static String getMonthFirstDate(LocalDate date) {
        if (date == null) {
            return null;
        }
        LocalDate day = date.with(TemporalAdjusters.firstDayOfMonth());
        return day.format(DATE_FORMAT_23);
    }

    /**
     * 获取指定日期所在月的最后一天
     */
    public static String getMonthLastDate(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        LocalDate localDate = LocalDate.parse(date, DATE_COMMON_PATTERN);
        LocalDate day = localDate.with(TemporalAdjusters.lastDayOfMonth());
        return day.format(DATE_FORMAT_23);
    }

    /**
     * 获取指定日期所在月的最后一天
     */
    public static String getMonthLastDate(LocalDate date) {
        if (date == null) {
            return null;
        }
        LocalDate day = date.with(TemporalAdjusters.lastDayOfMonth());
        return day.format(DATE_FORMAT_23);
    }

    public static String timeToString(Date d, String pattern) {
        if (d == null) {
            return null;
        }
        return new SimpleDateFormat(pattern).format(d);
    }

    public static String localDateToString(LocalDate date, String pattern) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
        return date.format(fmt);
    }

    public static String localDateTimeToString(LocalDateTime date, String pattern) {
        if (date == null) {
            return "";
        }
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
        return date.format(fmt);
    }

    /**
     * 获取过去或者未来 任意天内的日期数组
     */
    public static ArrayList<String> getDateArr(int intervals) {
        ArrayList<String> pastDaysList = new ArrayList<>();
        for (int i = intervals - 1; i >= 0; i--) {
            pastDaysList.add(getPastDate(i));
        }
        return pastDaysList;
    }

    /**
     * 获取过去第几天的日期
     */
    public static String getPastDate(int past) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
        Date today = calendar.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        return format.format(today);
    }

    /**
     * 获取未来 第 past 天的日期
     */
    public static String getFetureDate(int past) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + past);
        Date today = calendar.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        return format.format(today);
    }

    /**
     * 获取两个时间段内的所有日期,日期可跨年
     */
    public static List<String> getBetweenDate(String begin, String end) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        List<String> betweenList = new ArrayList<>();

        try {
            Calendar startDay = Calendar.getInstance();
            startDay.setTime(format.parse(begin));
            startDay.add(Calendar.DATE, -1);

            while (true) {
                startDay.add(Calendar.DATE, 1);
                Date newDate = startDay.getTime();
                String newend = format.format(newDate);
                betweenList.add(newend);
                if (end.equals(newend)) {
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return betweenList;
    }

    /**
     * 时间差 type:1天,2,小时,3,分钟,4秒
     */
    public static Long getDateDiff(LocalDateTime currentTime, LocalDateTime compareTime, int type) {
        Long diffTime = null;
        long diff = getTimeStamp(currentTime) - getTimeStamp(compareTime);
        switch (type) {
            case 1:
                diffTime = diff / (1000 * 60 * 60 * 24);
                break;
            case 2:
                diffTime = diff / (1000 * 60 * 60);
                break;
            case 3:
                diffTime = diff / (1000 * 60);
                break;
            case 4:
                diffTime = diff / 1000;
                break;
        }
        return diffTime;
    }

    public static LocalDateTime getDateEndTime(LocalDateTime localDateTime) {
        LocalDate day = localDateTime.toLocalDate();
        return LocalDateTime.of(day.getYear(), day.getMonthValue(), day.getDayOfMonth(), 23, 59, 59);
    }
}

如有疑惑请留言,看到会一一解答。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值