关于日期类的工具整理LocalDateTime DateTime Data之间的转换


学习内容:

在开发过程中经常会用到日期的转换,日期的处理,自己整理了目前满足大部分开发的需求,具体看下面代码



package com.xinaly.provider.utils;

import org.apache.commons.lang.StringUtils;

import java.sql.Time;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Stream;

import static java.util.stream.Collectors.toList;

/**
 * @author xinaly
 */
public abstract class LocalDateUtil {
    public final static String DATE_TIME_MINUTE = "yyyy-MM-dd HH:mm:ss";
    public final static String DATE_TIME_MINUTE3 = "yyyyMMddHHmmss";
    public static String LONG_DATE_FORMAT_MINUTE1 = "yyyy-MM-dd HH:mm";
    public static String LONG_DATE_FORMAT_MINUTE2 = "yyyy/MM/dd HH:mm";
    public static String DATE_FORMAT_MINUTE1 = "yyyy-MM-dd";
    public static String DATE_FORMAT_MINUTE2 = "yyyy/MM/dd";
    public static String DATE_FORMAT_MINUTE3 = "yyyy.MM.dd";
    public static String DATE_FORMAT_MINUTE4 = "yyMMdd";
    public static String DATE_FORMAT_MINUTE5 = "yyyyMM";
    public static String DATE_FORMAT_MINUTE6 = "MM";
    public static String DATE_FORMAT_MINUTE7 = "dd";
    public static String DATE_FORMAT_MINUTE8 = "yyyyMMdd";
    public static String HOUR_FORMAT = "HH:mm";
    public static String MONTH_DAY = "MM-dd";

    public static String LONG_DATE_FORMAT_MINUTE = "yyyy-MM-dd HH:mm";
    public static String DATE_FORMAT_MINUTE = "yyyy/MM/dd";
    public static String DATE_FORMAT_TIME = "yyyy年MM月dd日 HH:mm:ss";
    public static String DATE_FORMAT = "yyyy年MM月";

    public static DateTimeFormatter CHINESE_FORMATTER = DateTimeFormatter.ofPattern("yyyy年MM月dd日");

    public static LocalDateTime getZeroTime(LocalDate date) {
        if (date == null) {
            return null;
        }

        return date.atTime(0, 0, 0, 0);
    }

    public static String timeToString(LocalDateTime time, String format) {
        if (time == null) {
            return null;
        }
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return df.format(time);
    }

    public static LocalDateTime stringToTime(String timeStr, String format) {
        if (StringUtils.isBlank(timeStr)) {
            return null;
        }
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(timeStr, df);
    }

    public static String dateToString(LocalDate date, String format) {
        if (date == null) {
            return null;
        }
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return df.format(date);
    }

    public static LocalDate parse(String date) {
        return LocalDate.parse(date, DateTimeFormatter.ISO_LOCAL_DATE);
    }

    public static LocalDate firstDateOfMonth(LocalDate anyDay) {
        return anyDay.withDayOfMonth(1);
    }

    public static LocalDate lastDateOfMonth(LocalDate anyDay) {
        LocalDate date = firstDateOfMonth(anyDay);
        return date.plusMonths(1).minusDays(1);
    }

    public static String shortTimeToString(Time time, String format) {
        if (time == null) {
            return null;
        }
        DateFormat df = new SimpleDateFormat(format);
        return df.format(time);
    }

    public static String timeToChinese(String time) {
        if (time == null) {
            return null;
        }
        LocalDate date = null;
        try {
            date = LocalDate.parse(time, DateTimeFormatter.ISO_LOCAL_DATE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return timeToChinese(date);
    }

    public static String timeToChinese(LocalDate date) {
        if (date == null) {
            return null;
        }
        return date.format(CHINESE_FORMATTER);
    }

    /**
     * yyyy-MM-dd
     */
    public static String today() {
        return dateToString(LocalDate.now(), DATE_FORMAT_MINUTE1);
    }

    /**
     * 2018-12-13 -> [2018, 12, 13]
     */
    public static String[] split(LocalDate date) {
        return dateToString(date, DATE_FORMAT_MINUTE1).split("-");
    }

    public static Boolean beforeOrEquals(LocalDate date1, LocalDate date2) {
        return date1.isBefore(date2) || date1.equals(date2);
    }

    public static Boolean afterOrEquals(LocalDate date1, LocalDate date2) {
        return date1.isAfter(date2) || date1.equals(date2);
    }


    /**
     * 日期2-日期1=天数
     */
    public static int getDays(Date date1, Date date2) {
        Calendar aCalendar = Calendar.getInstance();
        aCalendar.setTime(date1);
        long begin = aCalendar.getTimeInMillis();
        aCalendar.setTime(date2);
        long end = aCalendar.getTimeInMillis();
        long days = (end - begin) / (1000 * 3600 * 24);
        return (int) days;
    }

    /**
     * LocalDate->Date
     */
    public static Date convertDate(LocalDate localDate) {
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
        return Date.from(zdt.toInstant());
    }

    /**
     * LocalDateTime->Date
     */
    public static Date convdateTime(LocalDateTime localDateTime) {
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zdt = localDateTime.atZone(zoneId);
        return Date.from(zdt.toInstant());
    }

    /**
     * Date->LocalDateTime
     */
    public static LocalDateTime dateToLocalDateTime(Date date) {
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

    /**
     * Date->LocalDate
     */
    public static LocalDate dateToLocalDate(Date date) {
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        return localDateTime.toLocalDate();
    }

    /**
     * 周期
     *
     * @return 2018-12-12/2018-12-30
     */
    public static String period(LocalDate startDate, LocalDate endDate, String format) {
        if (startDate.isEqual(endDate)) {
            return dateToString(startDate, format);
        }
        return LocalDateUtil.dateToString(startDate, format) + "-" + LocalDateUtil.dateToString(endDate, format);
    }

    public static String period(LocalDate startDate, LocalDate endDate, String format, String splitter) {
        if (startDate.isEqual(endDate)) {
            return dateToString(startDate, format);
        }
        return LocalDateUtil.dateToString(startDate, format) + splitter + LocalDateUtil.dateToString(endDate, format);
    }

    public static String period(LocalDateTime startTime, LocalDateTime endTime, String format) {
        if (startTime.isEqual(endTime)) {
            return timeToString(startTime, format);
        }
        return LocalDateUtil.timeToString(startTime, format) + "-" + LocalDateUtil.timeToString(endTime, format);
    }

    public static String period(Time startTime, Time endTime, String format) {
        if (startTime.equals(endTime)) {
            return shortTimeToString(startTime, format);
        }
        return LocalDateUtil.shortTimeToString(startTime, format) + "-" + LocalDateUtil.shortTimeToString(endTime, format);
    }

    /**
     * 两个日期之间的所有日期集合
     */
    public static List<LocalDate> getBetweenDay(LocalDate startDate, LocalDate endDate) {
        long distance = ChronoUnit.DAYS.between(startDate, endDate);
        if (distance < 0L) {
            return null;
        }

        return Stream.iterate(startDate, d -> d.plusDays(1)).limit(distance + 1).collect(toList());
    }

    public static Comparator<LocalDateTime> orderByTime() {
        return (LocalDateTime::compareTo);
    }

    /**
     * 获取某天的最后时间
     */
    public static LocalDateTime getEndTimeOfDay(LocalDate date) {
        return LocalDateTime.of(date.getYear(), date.getMonth(), date.getDayOfMonth(), 23, 59, 59);
    }

    /**
     * 判断两个日期是否同一年
     * @param date1
     * @param date2
     * @return
     */
    public static Boolean isSameYear(Date date1,Date date2){
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
        return  cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);
    }

    /**
     * 获取月份
     */
    public static Integer getMonth(LocalDate date) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(DATE_FORMAT_MINUTE6);
        return Integer.parseInt(df.format(date));
    }

    /**
     * 获取日
     */
    public static Integer getDay(LocalDate date) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(DATE_FORMAT_MINUTE7);
        return Integer.parseInt(df.format(date));
    }

    public static Boolean isDateExpire(Date startDate, Date endDate) {
        LocalDate start = LocalDateUtil.dateToLocalDate(startDate);
        LocalDate end = LocalDateUtil.dateToLocalDate(endDate);
        LocalDate now = LocalDate.now();
        return beforeOrEquals(start, now) && afterOrEquals(end, now);
    }


    /**
     * 得到今天00:00时间字符串
     * @return
     */
    public static String getTodayStart(){
        LocalDateTime today_start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
        DateTimeFormatter time = DateTimeFormatter.ofPattern(DATE_TIME_MINUTE);
        String todayStart=time.format(today_start);
        return todayStart;
    }

    /**
     * 得到今天结束23.59时间字符串
     * @return
     */
    public static String getTodayEnd(){
        LocalDateTime today_end = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
        DateTimeFormatter time = DateTimeFormatter.ofPattern(DATE_TIME_MINUTE);
        String todayEnd=time.format(today_end);
        return todayEnd;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值