一、问题描述
jdk8以前的Date、Calender类,处理转换繁琐,线程不安全
二、解决
jdk8使用LocalDate、LocalTime、LocalDateTime来处理日期和时间问题。
LocalDate 本地日期;LocalTime 本地时间;LocalDateTime 本地日期+时间
日期时间工具类:
package com.cebbank.cloudmall.controller;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalUnit;
/**
* 日期时间工具类
*/
public class LocalDateTimeUtils {
/**
* 日期字符串按照指定pattern转换为LocalDateTime
* @param dateTimeStr
* @param pattern
* @return
*/
public static LocalDateTimeconverStrToLocalDateTime(String dateTimeStr,String pattern){
return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern(pattern));
}
/**
* LocalDateTime按照指定pattern转为字符串
* @param localDateTime
* @param pattern
* @return
*/
public static StringconvertDateTimeToStr(LocalDateTime localDateTime,String pattern){
return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
}
/**
* 按照指定pattern获取当前时间字符串
* @param pattern
* @return
*/
public static StringgetCurrentDateTime(String pattern){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(pattern));
}
/**
* 将一种格式的日期字符串转换为另一种格式
* @param dateTimeStr
* @param fromPattern
* @param toPattern
* @return
*/
public static StringconvertDateTimeStrByPattern(String dateTimeStr,String fromPattern,String toPattern){
return LocalDateTime.parse(dateTimeStr,DateTimeFormatter.ofPattern(fromPattern)).format(DateTimeFormatter.ofPattern(toPattern));
}
/**
* 判断是否在某一时间段内
* @param nowTime
* @param startTime
* @param endTime
* @return
*/
public static boolean betweenDateTime(LocalDateTime nowTime,LocalDateTime startTime,LocalDateTime endTime){
return nowTime.isAfter(startTime) && nowTime.isBefore(endTime);
}
/**
* 返回当前日期零点
* @return
*/
public static LocalDateTimegetZeroDateTime(){
return LocalDateTime.now().toLocalDate().atTime(0,0,0,0);
}
/**
* 获取当前时间前后的时间
* @param dateTime
* @param type
* @param num
* @return
*/
public static LocalDateTimegetDateTime(LocalDateTime dateTime, TemporalUnit type,int num){
return dateTime.plus(num,type);
}
/**
* 获取两个时间的间隔天数(过了零点即算一天)
* @param begin
* @param end
* @return
*/
public static int getDaysBetweenTowDateTime(LocalDateTime begin,LocalDateTime end){
return begin.toLocalDate().until(end.toLocalDate()).getDays();
}
}