jdk8 localDateTime和localDate的工具类

1.获取几个月前或几个月后的日期

public static LocalDate getMonthPast(LocalDate startDate, int month) {
		LocalDate localDate = startDate.minusMonths(month);
		return LocalDate.from(localDate);
	}

public static LocalDate getMonthDate(LocalDate startDate, int month) {
		LocalDate localDate = startDate.plusMonths(month);
		return LocalDate.from(localDate);
	}

2.计算年龄

  /**
  * 计算年龄 年为单位
  * @Param beginDate
  * @Param endDate
  * @return java.lang.String
  **/
    public static String getAgeAboutYear(LocalDate beginDate,LocalDate endDate,Boolean containStr) {
        if (ObjectUtil.isNull(beginDate)) {
            return "未知";
        }
        Period period = Period.between(beginDate,endDate);
        StringBuilder age = new StringBuilder();
        if (period.getYears() > 0) {
            age.append(period.getYears());
        } else {
            age.append(ProjectConstants.ZERO);
        }
        if (containStr) {
            age.append("岁");
        }
        return age.toString();
    }

3.Localdate与String日期字符串互相转换

    /**
      * localDate转为string
      * @param date 日期
      * @param formatStr 格式
      * @return
      */
    public static String localDateToString(LocalDate date, String formatStr) {
        String dateStr = "";
        if (ObjectUtil.isNotNull(date)) {
            DateTimeFormatter fmt = DateTimeFormatter.ofPattern(formatStr);
            dateStr = date.format(fmt);
        }
        return  dateStr;
    }
  /**
    * String转为localDate
    * @param dateStr 时间字符串
    * @param format 格式
    * @return
    */
    public static LocalDate stringToLocalDate(String dateStr, String format) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
        return LocalDate.parse(dateStr, dtf);
    }

4.Localdate与Date互相转换

  /**
    * localDate转为date
    * @param localDate 时间
    * @return
    */
    public static Date localDateTToDate(LocalDate localDate) {
        Date date = null;
        if (ObjectUtil.isNotNull(localDate)) {
        	date = Date.from(localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
        }
        return date;
    }
	/**
     * date转为LocalDate
     * @param date
     * @return
     */
    public static LocalDate dateToLcalDate(Date date) {
        LocalDate localDate = null;
        if (ObjectUtil.isNotNull(date)) {
            localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        }
        return localDate;
    }

5.LocaldateTime与String日期字符串互相转换

  /**
  * localDateTime转为string
  * @param date 日期
  * @param formatStr 格式
  * @return
  */
    public static String localDateTimeToString(LocalDateTime date, String formatStr) {
        String dateStr = "";
        if (ObjectUtil.isNotNull(date)) {
            DateTimeFormatter fmt = DateTimeFormatter.ofPattern(formatStr);
            dateStr = date.format(fmt);
        }
        return  dateStr;
    }

  /**
    *  String转为localDateTime
    * @param dateStr 时间字符串
    * @param format 格式
    * @return
    */
    public static LocalDateTime stringToLocalDateTime(String dateStr, String format) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(dateStr, dtf);
    }

6.LocaldateTime与Date互相转换

 /**
  * date转为localDateTime
  * @param date 时间
  * @return
  */
    public static LocalDateTime dateToLocalDateTime(Date date) {
        LocalDateTime localDateTime = null;
        if (ObjectUtil.isNotNull(date)) {
            Instant instant = date.toInstant();
            ZoneId zoneId = ZoneId.systemDefault();
            localDateTime = LocalDateTime.ofInstant(instant, zoneId);
        }
        return  localDateTime;
    }

  /**
  * localDateTime转为date
  * @param localDateTime 时间
  * @return
  */
    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        Date date = null;
        if (ObjectUtil.isNotNull(localDateTime)) {
            ZoneId zoneId = ZoneId.systemDefault();
            ZonedDateTime zdt = localDateTime.atZone(zoneId);
            date = Date.from(zdt.toInstant());
        }
            return  date;
    }

7.LocalDate与LocalDateTime的互相转换

 // LocalDate 转 LocalDateTime
LocalDate localDate = LocalDate.now();
LocalDateTime datetime = localDate.atStartOfDay();
 // LocalDate 转 LocalDateTime 可指定时分秒
LocalDateTime dateTime = localDate.atTime(15, 30, 1);
// 只指定时分
LocalDateTime dateTime = localDate.atTime(15, 30);
// 也可使用LocalTime
LocalTime of = LocalTime.of(15, 30,30);
LocalDateTime dateTime = localDate.atTime(of);
/**********************************************************************/
// LocalDateTime 转 LocalDate
LocalDate date = dateTime.toLocalDate();

8.获取连续的时间序列

 /**
    * 获取end时间之前的连续分钟时间序列(String)
    * @param end
    * @param format 时间格式
    * @param minutes 总共时长
    * @param step 步长
    * @return
    */
    public static List<String> getStringMinutesSeries(LocalDateTime end,String format, int minutes, int step) {
        List<String> series = new ArrayList<>();
        for (int i = 0; i < minutes; i+=step) {
            LocalDateTime localDateTime = end.minusMinutes(i);
            // 参考第五点
            String str = localDateTimeToString(localDateTime, format);
            series.add(str);
        }
        Collections.reverse(series);
        return series;
	}
	
	/**
	 * 获取end时间之前的连续时间序列(LocalDateTime)
	 * @param end
	 * @param hours 总共时长
	 * @param step 步长
	 * @return
	 */
	public static List<LocalDateTime> getHoursSeries(LocalDateTime end,int hours, int step) {
		end = end.truncatedTo(ChronoUnit.HOURS);
		List<LocalDateTime> series = new ArrayList<>();
		for (int i = 0; i < hours; i+=step) {
			LocalDateTime localDateTime = end.minusHours(i);
			series.add(localDateTime);
		}
		Collections.reverse(series);
		return series;
	}


    /**
    * 获取end时间之前的连续小时时间序列(String)
    * @param end
    * @param format 时间格式
    * @param hours 总共时长
    * @param step 步长
    * @return
    */
    public static List<String> getStringHoursSeries(LocalDateTime end,String format, int hours, int step) {
        List<String> series = new ArrayList<>();
        for (int i = 0; i < hours; i+=step) {
            LocalDateTime localDateTime = end.minusHours(i);
            String str = localDateTimeToString(localDateTime, format);
            series.add(str);
    	}
        Collections.reverse(series);
        return series;
	}

	/**
	 * 获取end时间之前的连续时间序列(LocalDateTime)
	 * @param end
	 * @param hours 总共时长
	 * @param step 步长
	 * @return
	 */
	public static List<LocalDateTime> getHoursSeries(LocalDateTime end,int hours, int step) {
		end = end.truncatedTo(ChronoUnit.HOURS);
		List<LocalDateTime> series = new ArrayList<>();
		for (int i = 0; i < hours; i+=step) {
			LocalDateTime localDateTime = end.minusHours(i);
			series.add(localDateTime);
		}
		Collections.reverse(series);
		return series;
	}
  /**
    * 获取end时间之前的连续天时间序列
    * @param end
    * @param format 时间格式
    * @param days 总共时长
    * @param step 步长
    * @return
    */
    public static List<String> getDaysSeries(LocalDate end,String format, int days, int step) {
        List<String> series = new ArrayList<>();
        for (int i = 0; i < days; i+=step) {
            LocalDate localDateTime = end.minusDays(i);
            String str = localDateToString(localDateTime, format);
            series.add(str);
    	}
        Collections.reverse(series);
        return series;
	}

  /**
    * 获取end时间之前的连续周时间序列
    * @param end
    * @param format 时间格式
    * @param weeks 总共时长
    * @param step 步长
    * @return
    */
    public static List<String> getWeekSeries(LocalDateTime end, String format, int weeks, int step) {
        List<String> series = new ArrayList<>();
        for (int i = 0; i < weeks; i+=step) {
            LocalDateTime localDateTime = end.minusWeeks(i);
            String str = localDateTimeToString(localDateTime, format);
            series.add(str);
        }
        Collections.reverse(series);
        return series;
	}
   /**
     * 获取end时间之前的连续月时间序列
     * @param end
     * @param format 时间格式
     * @param months 总共时长
     * @param step 步长
     * @return
     */
    public static List<String> getMonthSeries(LocalDate end,String format, int months, int step) {
        List<String> series = new ArrayList<>();
        for (int i = 0; i < months; i+=step) {
            LocalDate localDate = end.minusMonths(i);
            String str = DateUtils.localDateToString(localDate, format);
            series.add(str);
        }
        Collections.reverse(series);
        return series;
    }

   /**
     * 获取end时间之前的连续年时间序列
     * @param end
     * @param format 时间格式
     * @param years 总共时长
     * @param step 步长
     * @return
     */
    public static List<String> getYearSeries(LocalDate end,String format, int years, int step) {
        List<String> series = new ArrayList<>();
        for (int i = 0; i < years; i+=step) {
            LocalDate localDate = end.minusYears(i);
            String str = DateUtils.localDateToString(localDate, format);
            series.add(str);
        }
        Collections.reverse(series);
        return series;
    }

使用示例:

// 查询现在时间之前的连续12个月,12表示总共12个月,1表示每个月,数组有12个值,如果设置成2,就会变成每2个月的
// 连续序列,数组中只会有6个值
List<String> monthSeries = DateUtils.getMonthSeries(LocalDate.now(), "yyyy-MM", 12, 1);
// 结果: [2022-10, 2022-11, 2022-12, 2023-01, 2023-02, 2023-03, 2023-04, 2023-05, 2023-06, 2023-07, 2023-08, 2023-09]
List<String> monthSeries = DateUtils.getMonthSeries(LocalDate.now(), "yyyy-MM", 12, 2);
// 结果: [2022-11, 2023-01, 2023-03, 2023-05, 2023-07, 2023-09]
List<String> monthSeries = DateUtils.getMonthSeries(LocalDate.now(), "yyyy-MM", 12, 3);
// 结果: [2022-12, 2023-03, 2023-06, 2023-09]
// .........

9.一些自定义的时间格式

public class DateUtils {

    public static final String DATE_SHORT_FORMAT = "yyyyMMdd";
    public static final String DATE_CH_FORMAT = "yyyy年MM月dd日";

    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_TIME_FORMAT_EXPORT = "yyyyMMddHHmmss";
    public static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.S";
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    public static final String DATE_MONTH_FORMAT = "yyyy-MM";

    public static final String DATE_MONTH_FORMAT_SPOT = "yyyy.MM";
    public static final String DATE_MONTH_FORMAT_SPACE_ZH = "yyyy 年 MM 月 dd 日";
    public static final String TIME_FORMAT = "HH:mm:ss";
    public static final String MINUTES_FORMAT = "HH:mm";
    public static final String HOUR_FORMAT = "HH";
    public static final String MONTH_DAY_FORMAT = "MM-dd";
    public static final String DATE_HOUR_FORMAT = "yyyy-MM-dd HH";
    public static final String DATE_SECOND_FORMAT = "yyyy-MM-dd HH:mm";
	
    public static final String MINUTE_SECOND = ":00:00";
    public static final String SECOND = ":00";

    private DateUtils() {

    }       
}

再难的困境,只要扛过去,终将变成往事

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值