【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這種,比較結果就會和預期不符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM