j基于JDK1.8的日期工具类

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

/**

  • 基于JDK 1.8 日期API

  • @Author: xingchen

  • @ClassName: DateUtils

  • @Date: 2018/12/10下午2:21

  • @Description:
    */
    public class DateUtils {
    private static String YYYYMMDDHHMMSS = “yyyy-MM-dd HH:mm:ss”;
    private static String YYYYMMDD = “yyyy-MM-dd”;
    private static String YYYYMM = “yyyy-MM”;

    /**

    • 将日期转为字符串 yyyy-mm-dd HH:mm:ss
    • @param date
    • @return
      */
      public static String getYYYYMMDDHHMMSS(Date date) {
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYYMMDDHHMMSS);
      LocalDateTime localDateTime = dateToDateTime(date);
      return formatter.format(localDateTime);
      }

    /**

    • 将字符串转为日期
    • @param date
    • @return
      */
      public static Date getDate(String date) {
      DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(YYYYMMDDHHMMSS);
      LocalDateTime localDateTime = LocalDateTime.parse(date, dateTimeFormatter);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 将字符串转为日期
    • @param date
    • @return
      */
      public static Date getDate(String date, String pattern) {
      DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
      LocalDateTime localDateTime = LocalDateTime.parse(date, dateTimeFormatter);
      return dateTimeToDate(localDateTime);
      }

    /**

    • LocalDateTime 和DateTime 互转
    • @param date
    • @return
      */
      public static LocalDateTime dateToDateTime(Date date) {
      Instant instant = date.toInstant();
      return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
      }

    public static Date dateTimeToDate(LocalDateTime localDateTime) {
    Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    return date;
    }

    /**

    • date 转LocalDate
    • @param date
    • @return
      */
      public static LocalDate dateToLocalDate(Date date) {
      Instant instant = date.toInstant();
      LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
      return localDate;
      }

    /**

    • date 转LocalDate
    • @param localDate
    • @return
      */
      public static Date localToDate(LocalDate localDate) {
      Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
      return date;
      }

    /**

    • date 转DateTime
    • @param date
    • @return
      */
      public static LocalTime dateToLocalTime(Date date) {
      Instant instant = date.toInstant();
      LocalTime localTime = instant.atZone(ZoneId.systemDefault()).toLocalTime();
      return localTime;
      }

    /**

    • date 转LocalTime
    • @param localTime
    • @return
      */
      public static Date localToDate(LocalTime localTime) {
      LocalDate localDate = LocalDate.now();
      LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
      ZoneId zone = ZoneId.systemDefault();
      Instant instant = localDateTime.atZone(zone).toInstant();
      java.util.Date date = Date.from(instant);
      return date;
      }

    /**

    • 将日期转为字符串 yyyy-mm-dd
    • @param date
    • @return
      */
      public static String getYYYYMMDD(Date date) {
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYYMMDD);
      LocalDateTime localDateTime = dateToDateTime(date);
      return formatter.format(localDateTime);
      }

    /**

    • 将日期转为字符串 yyyy-mm-dd
    • @param date
    • @return
      */
      public static String getYYYYMM(Date date) {
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYYMM);
      LocalDateTime localDateTime = dateToDateTime(date);
      return formatter.format(localDateTime);
      }

    /**

    • 获取当前时间之后的某一天的最小时间
    • @param date
    • @return
      */
      public static Date afterXDateTimeMIN(Date date, int after) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.plusDays(after);
      localDateTime = localDateTime.with(LocalTime.MIN);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 获取当前时间之后的某一天的最大时间
    • @param date
    • @return
      */
      public static Date afterXDateTimeMAX(Date date, int after) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.plusDays(after);
      localDateTime = localDateTime.with(LocalTime.MAX);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 获取当前时间之前的某一天的最小时间
    • @param date
    • @return
      */
      public static Date beforeXDateTimeMIN(Date date, int before) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.minusDays(before);
      localDateTime = localDateTime.with(LocalTime.MIN);
      return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
      }

    /**

    • 获取当前时间之前的某一天的最大时间
    • @param date
    • @return
      */
      public static Date beforeXDateTimeMAX(Date date, int before) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.minusDays(before);
      localDateTime = localDateTime.with(LocalTime.MAX);
      return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
      }

    /**

    • 获取本月的第一天 00:00:00
    • @return
      */
      public static Date currentFirstDayOfMonth() {
      LocalDateTime localDateTime = LocalDateTime.now();
      localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 获取传入时间月份的最后一天
    • @return
      */
      public static Date currentXDayOfMonth(Date date) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 所选date的月份的第一天
    • @return
      */
      public static Date beforeXFirstDayOfMonth(Date date) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 获取前几个月的1号0点 00:00:00
    • @return
      */
      public static Date preXDayOfMonthMIN(int month) {
      LocalDateTime localDateTime = LocalDateTime.now();
      localDateTime = localDateTime.minusMonths(month);
      localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 获取前几个月的1号0点 00:00:00
    • @return
      */
      public static Date preXDayOfMonthMIN(Date date, int month) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.minusMonths(month);
      localDateTime = localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 传入时间的的前几个月的时间
    • @return
      */
      public static Date preXDayOfMonth(Date date, int month) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.minusMonths(month);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 传入时间的的前几个月的时间
    • @return
      */
      public static Date afterXDayOfMonth(Date date, int month) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.plusMonths(month);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 获取前几个月的最后一天23:59:59
    • @return
      */
      public static Date preXDayOfMonthMAX(int month) {
      LocalDateTime localDateTime = LocalDateTime.now();
      localDateTime = localDateTime.minusMonths(month);
      localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 获取某个时间几个月的最后一天23:59:59
    • @return
      */
      public static Date preXDayOfMonthMAX(Date date, int month) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.minusMonths(month);
      localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
      return dateTimeToDate(localDateTime);
      }

    /**

    • 两个日期相差多少个月
    • @param date1
    • @param date2
    • @return
      */
      public static Long getUntilMonth(Date date1, Date date2) {
      LocalDate localDate1 = dateToLocalDate(date1);
      LocalDate localDate2 = dateToLocalDate(date2);
      return ChronoUnit.MONTHS.between(localDate1, localDate2);
      }

    /**

    • 两个日期相差多少天
    • @param date1
    • @param date2
    • @return
      */
      public static Long getUntilDay(Date date1, Date date2) {
      LocalDate localDate1 = dateToLocalDate(date1);
      LocalDate localDate2 = dateToLocalDate(date2);
      return ChronoUnit.DAYS.between(localDate1, localDate2);
      }

    /**

    • 两个日期相差多少小时
    • @param date1
    • @param date2
    • @return
      */
      public static Long getUntilHours(Date date1, Date date2) {
      LocalDateTime localDate1 = dateToDateTime(date1);
      LocalDateTime localDate2 = dateToDateTime(date2);
      Long senonds = Duration.between(localDate1, localDate2).get(ChronoUnit.SECONDS);
      return senonds / 3600;
      }

    /**

    • 两个日期相差多少小时 double 约等于
    • @param date1
    • @param date2
    • @return
      */
      public static double getUntilHoursByDouble(Date date1, Date date2) {
      LocalDateTime localDate1 = dateToDateTime(date1);
      LocalDateTime localDate2 = dateToDateTime(date2);
      Long seconds = Duration.between(localDate1, localDate2).get(ChronoUnit.SECONDS);
      BigDecimal secondss = BigDecimal.valueOf(seconds);
      BigDecimal hours = secondss.divide(BigDecimal.valueOf(3600), 2, BigDecimal.ROUND_HALF_UP);
      return hours.doubleValue();
      }

    /**

    • 两个日期相差多少秒
    • @param date1
    • @param date2
    • @return
      */
      public static Long getUntilSecond(Date date1, Date date2) {
      LocalDateTime localDate1 = dateToDateTime(date1);
      LocalDateTime localDate2 = dateToDateTime(date2);
      return Duration.between(localDate1, localDate2).get(ChronoUnit.SECONDS);
      }

    public static void main(String args[]) {
    //LocalDateTime localDateTime = LocalDateTime.now();

     System.out.println(getYYYYMMDDHHMMSS(currentXDayOfMonth(new Date())));
    

    }

    /**

    • 当前时间23:59:59
    • @param date
    • @return
      */
      public static Date currentMax(Date date) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.with(LocalTime.MAX);
      return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
      }

    /**

    • 当前时间00:00:00
    • @param date
    • @return
      */
      public static Date currentMin(Date date) {
      LocalDateTime localDateTime = dateToDateTime(date);
      localDateTime = localDateTime.with(LocalTime.MIN);
      return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
      }
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值