java8出了个新的时间类,LocalDate和LocalDateFormat,我尝试用了下,感觉好用很多,效率也高。我拿几个例子比较一下。
之前我用的是Calendar,我要获取当前年,代码如下:
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
而LocalDate直接这样获取:
int year = LocalDate.now().getYear();
我需要获取当天开始时间和最后时间(这两个时间点是在查询报表记录经常用到的)
Calendar 获取方法
public static Date firstTimeOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.clear(Calendar.MILLISECOND);
return calendar.getTime();
}
public static Date lastTimeOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.clear(Calendar.MILLISECOND);
return calendar.getTime();
}
而LocalDate直接这样获取:
public static LocalDateTime firstTimeOfDay() {
return LocalDate.now().atStartOfDay();
}
public static LocalDateTime lastTimeOfDay() {
return LocalDate.now().atTime(23,59,59);
}
还有获取明天日期比较:
Calendar:
public static Date getTomorrow(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);
return calendar.getTime();
}
LocalDate:
public static LocalDate getTomorrow() {
return LocalDate.now().plusDays(1);
}
从上述几个例子,大家知道哪个时间类好用了吧?
还有日期转换类,我们都知道,SimpleDateFormat是线程不安全的,所以我们用的时候,都要先定义
private static final ThreadLocal<ConcurrentMap<String, SimpleDateFormat>> locals = new ThreadLocal();
来保证其线程安全,而LocalDateFormat是线程安全的,不用考虑这方面。
话不多说,先上我写的LocalDate和LocalDateFormat工具类,大家可以尝试测试一下。
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
/**
* @author chenshaohao
* @date 2018/5/4
*/
public class LocalDateUtils {
public static final String YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss";
public static final String YYYYMMDD = "yyyy-MM-dd";
private LocalDateUtils(){}
public static String formatYMD(LocalDateTime date) {
return format(date, YYYYMMDD);
}
public static String formatYMDHMS(LocalDateTime date) {
return format(date, YYYYMMDDHHMMSS);
}
public static String format(LocalDateTime date, String format) {
return LocalDateFormatUtils.format(date,format);
}
/**
* @return 当天开始时间 00:00
*/
public static LocalDateTime firstTimeOfDay() {
return LocalDate.now().atStartOfDay();
}
/**
* @return 当天最后时间 23:59:59
*/
public static LocalDateTime lastTimeOfDay() {
return LocalDate.now().atTime(23,59,59);
}
/**
* @return 明天日期
*/
public static LocalDate getTomorrow() {
return LocalDate.now().plusDays(1);
}
/**
* @return 本月第一天
*/
public static LocalDate firstDayOfThisMonth() {
return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
}
/**
* @return 本月最后一天
*/
public static LocalDate lastDayOfMonth() {
return LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
}
/**
* 判断当前日期是否在两个日期期间内
* @param before
* @param after
* @return true or false
*/
public static boolean twoDatePeriod(LocalDateTime before,LocalDateTime after){
LocalDateTime now = LocalDateTime.now();
return now.isAfter(before) && now.isBefore(after);
}
}
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author chenshaohao
* @date 2018/5/4
*/
public class LocalDateFormatUtils {
public static final String YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss";
public static final String YYYYMMDD = "yyyy-MM-dd";
private LocalDateFormatUtils(){}
public static String formatYMD(LocalDateTime date) {
return format(date, YYYYMMDD);
}
public static String formatYMDHMS(LocalDateTime date) {
return format(date, YYYYMMDDHHMMSS);
}
public static LocalDateTime formatYMD(String date) {
return format(date, YYYYMMDD);
}
public static LocalDateTime formatYMDHMS(String date) {
return format(date, YYYYMMDDHHMMSS);
}
public static String format(LocalDateTime date, String pattern) {
return date == null?null:getStringFormat(date,pattern);
}
public static LocalDateTime format(String date, String pattern) {
return date == null?null:getDateFormat(date,pattern);
}
/**
* 日期解析字符串
* @return String
*/
public static String getStringFormat(LocalDateTime date, String pattern) {
DateTimeFormatter format = DateTimeFormatter.ofPattern(pattern);
return date.format(format);
}
/**
* 字符串解析日期
* @return LocalDateTime
*/
public static LocalDateTime getDateFormat(String date, String pattern) {
DateTimeFormatter format = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(date,format);
}
}
更多工具类持续更新中,大家可以关注我