LocalDateTime是Java 8引入的日期时间类,表示一个不带时区的日期时间,包含年、月、日、小时、分钟、秒和毫秒等信息。它可以用于处理不涉及时区转换的日期时间计算和格式化输出。具体方法包括:
-
now():获取当前的日期时间
-
of():根据指定的年、月、日、小时、分钟、秒等信息创建LocalDateTime实例
-
parse():将指定格式的字符串转换为LocalDateTime实例
-
format():将LocalDateTime实例格式化成指定格式的字符串
-
plusXXX():在日期时间上增加指定的年、月、日、小时、分钟、秒或毫秒
-
minusXXX():在日期时间上减少指定的年、月、日、小时、分钟、秒或毫秒
工具类如下:
public class LocalDateTimeUtil {
/**
* Date转换为LocalDateTime
*
* @param date 日期
* @return LocalDateTime
*/
public static LocalDateTime toLocalDateTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}
/**
* LocalDateTime转换为Date
*
* @param dateTime 日期时间
* @return Date
*/
public static Date toDate(LocalDateTime dateTime) {
return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* 获取指定格式的指定时间
*
* @param dateTime 日期时间
* @param pattern 指定格式
* @return 指定格式的日期时间字符串
*/
public static String formatTime(LocalDateTime dateTime, String pattern) {
return dateTime.format(DateTimeFormatter.ofPattern(pattern));
}
/**
* 获取指定格式的当前时间
*
* @param pattern 指定格式
* @return 指定格式的当前时间日期字符串
*/
public static String formatNow(String pattern) {
return formatTime(LocalDateTime.now(), pattern);
}
/**
* 判断dateTime1是否早于dateTime2
*
* @param dateTime1 日期时间1
* @param dateTime2 日期时间2
* @return 判断结果
*/
public static boolean isBefore(LocalDateTime dateTime1, LocalDateTime dateTime2) {
return dateTime1.isBefore(dateTime2);
}
/**
* 判断dateTime1与dateTime2是否是同一时间
*
* @param dateTime1 日期时间1
* @param dateTime2 日期时间2
* @return 判断结果
*/
public static boolean isEqual(LocalDateTime dateTime1, LocalDateTime dateTime2) {
return dateTime1.isEqual(dateTime2);
}
/**
* 判断dateTime1是否晚于dateTime2
*
* @param dateTime1 日期时间1
* @param dateTime2 日期时间2
* @return 判断结果
*/
public static boolean isAfter(LocalDateTime dateTime1, LocalDateTime dateTime2) {
return dateTime1.isAfter(dateTime2);
}
/**
* 获取指定日期的毫秒
*
* @param dateTime 日期时间
* @return 毫秒
*/
public static Long getMilliByTime(LocalDateTime dateTime) {
return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
/**
* 获取指定日期的秒
*
* @param dateTime 日期时间
* @return 秒
*/
public static Long getSecondsByTime(LocalDateTime dateTime) {
return dateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
}
/**
* 日期加上一个数,根据field不同加不同值
*
* @param dateTime 日期时间
* @param number 数值
* @param field 单位
* @return 已添加数值后的日期时间
*/
public static LocalDateTime plus(LocalDateTime dateTime, long number, ChronoUnit field) {
return dateTime.plus(number, field);
}
/**
* 日期减去一个数,根据field不同减不同值
*
* @param dateTime 日期时间
* @param number 数值
* @param field 单位
* @return 已减少数值后的日期时间
*/
public static LocalDateTime minus(LocalDateTime dateTime, long number, ChronoUnit field) {
return dateTime.minus(number, field);
}
/**
* 获取两个日期的差
*
* @param startDateTime 开始时间
* @param endDateTime 结束时间
* @param field 单位
* @return 两个日期之间的差值
*/
public static long between(LocalDateTime startDateTime, LocalDateTime endDateTime, ChronoUnit field) {
Period period = Period.between(LocalDate.from(startDateTime), LocalDate.from(endDateTime));
if (field == ChronoUnit.YEARS) {
return period.getYears();
}
if (field == ChronoUnit.MONTHS) {
return period.getYears() * 12 + period.getMonths();
}
return field.between(startDateTime, endDateTime);
}
/**
* 获取某天的开始时间,例如:yyyy,MM,dd 00:00
*
* @param dateTime 某天的日期时间
* @return 某天的开始时间
*/
public static LocalDateTime getDayStart(LocalDateTime dateTime) {
return dateTime.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
}
/**
* 获取某天的结束时间,例如:yyy,MM,dd 23:59:59
*
* @param dateTime 某天的日期时间
* @return 某天的结束时间
*/
public static LocalDateTime getDayEnd(LocalDateTime dateTime) {
return dateTime.withHour(23)
.withMinute(59)
.withSecond(59);
}
}
这段代码是一个工具类,用来进行日期时间的转换和格式化,主要应用于需要处理不带时区的日期时间的场景,如日志记录、时间计算、定时任务等。它比旧版的Date和Calendar类更加方便和易用,并且提供了更多的方法供开发者使用。