【Java基础】日期操作(返回当前日期&日期比较)

在项目中经常会用到日期操作,比如日期格式化,返回当前日期,日期比较等。

1.返回当前时间

1.方式1
public static String dateFormat(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

2.方式2
    private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");

public static String getCurrentDate(){
        LocalDate localDate = LocalDate.now();

        return localDate.format(dateFormatter);
    }

方式1因为 SimpleDateFormat不是线程安全的,因此做成局部变量,每次格式化都new一个对象,使用完GC回收,这是比较影响性能,推荐方式2,使用 DateTimeFormatter,是线程安全的格式化工具。内部使用 DateTimePrintContext 打印到 StringBuilder

2. 日期比较

方式1 /** 耗时 177ms
     * date日期和当前日期比较
     * @param date  如果date 比当前日期大 返回true
     * @return
     */
    public static boolean dateCompare(String date){
        LocalDate current = LocalDate.now();

        LocalDate comDate = LocalDate.parse(date , dateFormatter);
        return comDate.isAfter(current);
    }

 方式2   //耗时  288ms
    public static boolean simpleDateCompare(String date) throws ParseException {
        return new SimpleDateFormat("yyyyMMDD").parse(date).after(new Date());
    }

方式3  /**
     * 耗时  151ms
     * @param date
     * @return
     * @throws ParseException
     */
    public static boolean dateStringCompare(String date) throws ParseException {
        return date.compareTo(getCurrentDate()) > 0;
    }

    public static void main(String[] args) {
        try {
            long start = System.currentTimeMillis();
            int i = 0;
            while (i < 10000){
                System.out.println(dateCompare("20200503"));
                i++;
            }
            System.out.println("time :"+ (System.currentTimeMillis() - start));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

三种比较方式,同样的样本数据执行1万次,方式3直接字符串比较的性能最优,151ms,方式1其次,177ms,方式2最差,288ms,推荐方式2,方式3如果日期不是规则的,比如2019-01-01和2019-1-1这种,比较结果就会和预期不符。

猜你喜欢

转载自www.cnblogs.com/zhengwangzw/p/10869469.html