zoukankan      html  css  js  c++  java
  • 【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流水账公众号
  • 相关阅读:
    什么是架构
    jenkins权限插件配置
    解决Error response from daemon: oci runtime error: container_linux.go:247: starting container process
    解决“/tmp/crontab bad minute”问题
    yml链接mysql路径serverTimezone=UTC的那些坑
    java请求头导致特殊字符为空问题
    使用ssh连接WSL
    系统设计与任务分配
    需求规格说明书
    选题报告
  • 原文地址:https://www.cnblogs.com/guofu-angela/p/10869469.html
Copyright © 2011-2022 走看看