【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这种,比较结果就会和预期不符。
欢迎关注Java流水账公众号