Java8时间(日期)类LocalDateTime、LocalDate常用API方法

原创     发表于 2020-11-17 11:18     阅读 58  

从Java8开始,Java已经不在推荐使用Date作为时间、日期函数,为什么从Java8之后,推荐使用LocalDateTime、LocalDate,而为什么不再推荐使用Date了呢?

1、Java 的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,而且都不是线程安全的。

2、Date 只能是日期加时间的格式,这样在存储显示的时候是非常不方便的,而 LocalDate 、LocalTime、LocalDateTime分别代表日期,时间,日期+时间,非常灵活。再就是后者在日期计算及格式化方面非常简单易用,而Date要繁琐很多。

下面提供LocalDateTime、LocalDate常用API方法

1、获取当前时间/日期

/**
* 获取当前时间
*/
LocalDateTime nowTime = LocalDateTime.now();
/**
* 获取当前日期
*/
LocalDate nowDate = LocalDate.now();

2、获取年、月、日

/**
* 获取年份
*/
int year = nowDate.getYear();
/**
* 获取月份
*/
int monthValue = nowDate.getMonthValue();
/**
* 获取日期
*/
int dayOfMonth = nowDate.getDayOfMonth();

3、获取时间戳,毫秒

/**
 * 获取时间戳,毫秒
* @param dateTime
* @return
*/
public static long getEpochMilli(LocalDateTime dateTime) {
if(dateTime == null) {
return 0L;
}
return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}

4、获取时间戳,秒

/**
* 获取时间戳,秒
* @param dateTime
* @return
*/
public static long getEpochSecond(LocalDateTime dateTime) {
if(dateTime == null) {
return 0L;
}
return dateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
}

5、兼容Date类型,将 LocalDateTime 转为Date

/**
* 兼容Date类型,将 LocalDateTime 转为Date
* @param dateTime
* @return
*/
public static Date toDate(LocalDateTime dateTime) {
if(dateTime == null) {
return null;
}
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = dateTime.atZone(zoneId);
return Date.from(zdt.toInstant());
}

6、兼容Date类型,将 LocalDate 转为Date

/**
* 兼容Date类型,将 LocalDate 转为Date
* @param date
* @return
*/
public static Date toDate(LocalDate date) {
if(date == null) {
return null;
}
ZonedDateTime zonedDateTime = date.atStartOfDay(ZoneId.systemDefault());
return Date.from(zonedDateTime.toInstant());
}

7、获取日期月份第一天的日期

/**
 * 获取日期月份第一天的日期,时间同理
 * @param date
 * @return
*/
public static LocalDate getFirstDay(LocalDate date) {
if(date == null) {
return null;
}

return date.with(TemporalAdjusters.firstDayOfMonth());
}


相比较,LocalDateTime、LocalDate操作性、易用性、安全性均高于Date,项目中间建议尽量使用,原有项目如果情况允许,可以建议升级。

更多时间操作函数,可以参考:Obatis开源项目时间、日期操作函数