从Java8开始,Java已经不在推荐使用Date作为时间、日期函数,为什么从Java8之后,推荐使用LocalDateTime、LocalDate,而为什么不再推荐使用Date了呢?
1、Java 的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,而且都不是线程安全的。
2、Date 只能是日期加时间的格式,这样在存储显示的时候是非常不方便的,而 LocalDate 、LocalTime、LocalDateTime分别代表日期,时间,日期+时间,非常灵活。再就是后者在日期计算及格式化方面非常简单易用,而Date要繁琐很多。
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开源项目时间、日期操作函数
针对 naturalOrder() ,API 的介绍是这么写的:“Returns a comparator that compares {@link Comparable} objects in natural”。说白了就是将之前提倡的 compare 比较表达式给替换了,改由 Comparator.源码参考: 在编码中,如果我们使用了 compare 比较表达式,即“(e1, e2) -> e1
往往正确的选择开发工具,对于开发工作会有明显的效果提升,今天分享一下一些常用且覆盖面大的工具。IntelliJ IDEA 官网地址:https://www.com/idea/,下载可以免费试用一个月,后期得付费购买,如果需破解方法可以百度或者淘宝。是滴,很多使用 MySQL 做为项目DB的开发团队,数据库工具首选 Navicat Premium。实际上功能很强大也很全面,官方首页是这么介绍的:“N