Java 中常校验时间格式的方法

前言:

在实际项目开发中,跟时间参数打交道是必不可少的,为了保证程序的安全性、健壮性,一般都会对参数进行校验,其他类型的参数校验很好实现,那你知道时间参数的是怎么校验的吗?估计部分朋友在项目开发中,并没有对时间参数进行校验,本篇分享时间参数的场常见校验方法。

时间参数的校验方向?

  • 格式是否正确,比如业务设计需要的是 yyyy-MM-dd 格式,而传参是 yyyy-MM-dd HH:mm:ss 格式等等。
  • 是否可以解析为正常时间,比如:2月30号这种时间。
  • 时间范围是否在业务要求之内,比如要求最大时间范围为一年。

校验方法

方法一:

使用 SimpleDateFormat 校验,SimpleDateFormat(JDK8 之前常用的方法)。

java 复制代码
public class DateValidUtil {

    public static void main(String[] args) {
        System.out.println("结果1" + isValid("2024-13-06 12:12", "yyyy-MM-dd"));
        System.out.println("结果2" + isValid("2024-06-06 12:12:12", "yyyy-MM-dd HH:mm:ss"));
        System.out.println("结果3" + isValid("2024-06-06 12:12", "yyyy-MM-dd"));

    }

    public static boolean isValid(String dateStr,String dateFormat) {
        final DateFormat sdf = new SimpleDateFormat(dateFormat);
        sdf.setLenient(false);
        try {
            Date parse = sdf.parse(dateStr);
        } catch (ParseException e) {
            return false;
        }
        return true;
    }


}

测试结果:

powershell 复制代码
结果1false
结果2true
结果3true

结果分析:

  • 2024-13-06 12:12 中 13月是不存在的,因此校验出来是 false,没有问题。
  • 2024-06-06 12:12:12 校验结果为 true 没有问题。
  • 2024-06-06 12:12 校验结果也是 true,这个结果就有待商榷了,我们要的是 yyyy-MM-dd 格式的,而实际的时间是带了时、分的,其校验结果也是 true,如果要强校验格式这里就有点问题了。

方法二:

java 复制代码
public class DateValidUtil {

    public static void main(String[] args) {
        System.out.println("结果1"+isValidDate("2024-06-06 12:12","yyyy-MM-dd"));
        System.out.println("结果2"+isValidDate("2024-06-06 12:12:12","yyyy-MM-dd HH:mm:ss"));

    }


    public static boolean isValidDate(String dateStr, String pattern) {
        try {
            LocalDate parse = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
            System.out.println("转换结果"+parse);
        } catch (Exception e) {
            return false;
        }
        return true;
    }


}

测试结果:

powershell 复制代码
结果1false
结果2true
结果3false

结果分析:

  • 2024-13-06 12:12 中 13月是不存在的,因此校验出来是 false,没有问题。
  • 2024-06-06 12:12:12 校验结果为 true 没有问题。
  • 2024-06-06 12:12 校验结果也是 false,没有问题,因为我们要的是 yyyy-MM-dd 格式的,而实际的时间是带了时、分的,其校验结果也是 false,没有问题。

总结:对比两种校验方法,很明显使用 LocalDate 来校验更为严谨,如果你已经使用了 JDK8 及以上的版本,建议使用 LocalDate 来对日期格式进行校验。

欢迎提出建议及对错误的地方指出纠正。

相关推荐
范纹杉想快点毕业8 分钟前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
2501_9403152612 分钟前
【无标题】2390:从字符串中移除*
java·开发语言·算法
半聋半瞎16 分钟前
Flowable快速入门(Spring Boot整合版)
java·spring boot·后端·flowable
散峰而望25 分钟前
【算法竞赛】树
java·数据结构·c++·算法·leetcode·贪心算法·推荐算法
毕设源码-邱学长32 分钟前
【开题答辩全过程】以 基于SpringBoot的理工学院学术档案管理系统为例,包含答辩的问题和答案
java·spring boot·后端
shejizuopin35 分钟前
基于SSM的高校旧书交易系统的设计与实现(毕业论文)
java·mysql·毕业设计·论文·ssm·毕业论文·高校旧书交易系统的设计与实现
修己xj41 分钟前
SpringBoot解析.mdb文件实战指南
java·spring boot·后端
咩图1 小时前
Sketchup软件二次开发+Ruby+VisualStudioCode
java·前端·ruby
我命由我123451 小时前
Android 开发问题:Duplicate class android.support.v4.app.INotificationSideChannel...
android·java·开发语言·java-ee·android studio·android-studio·android runtime
熬夜敲代码的小N1 小时前
Unity大场景卡顿“急救包”:从诊断到落地的全栈优化方案
java·unity·游戏引擎