Java8中的LocalDate和LocalDateFormat工具类

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);
    }

}

更多工具类持续更新中,大家可以关注我

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值