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

server/2024/9/23 16:11:48/

前言:

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

时间参数的校验方向?

  • 格式是否正确,比如业务设计需要的是 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;}}

测试结果:

结果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;}}

测试结果:

结果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 来对日期格式进行校验。

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


http://www.ppmy.cn/server/48586.html

相关文章

Django Forbidden (CSRF cookie not set.)解决办法

解决办法就是在setting.py文件中注释: django.middleware.csrf.CsrfViewMiddleware, 这个中间件是为了防止跨站请求伪造的,平时用网页表单请求时,post提交是没有问题的,但是用api调用时就会被禁止,为了能使用接口调用…

在Lua解释器中注册自定义函数

本文目录 1、引言2、函数注册2.1注册原理 2.2 注册函数 3、实操3.1 编写注册函数3.2编写测试代码 4、结论 文章对应视频教程: 暂无,可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在之前的博客中,已经介绍了如何…

程序员搞副业一些会用到的工具

微信号采集(爬虫)技术的选型 那么,我们应该使用什么技术来从庞大的网页内容中自动筛选和提取微信号呢?答案就是:数据采集技术,也就是爬虫技术。 然而,数据采集技术种类繁多,我们具体应该采用哪一个呢&…

备战 清华大学 上机编程考试-冲刺前50%,倒数第3天

T1:水滴 - 模拟 这是一个经典的游戏。 在一个 𝑛𝑚 的棋盘上,每一个格子中都有一些水滴。 玩家的操作是,在一个格子中加一滴水。 当一个格子中的水滴数超过了 4,这一大滴水就会因格子承载不住而向外扩散。扩散的规…

HCIA1 华为VRP系统基本操作

1.实验组网介绍 使用PC电脑通过串口线,直连1台全新的路由器console port,进行简单配置。 2.配置思路 2.1配置设备名称 2.2配置路由器接口地址 2.3保存配置并重启设备 3.配置步骤 3.1 Console方式登录 略 3.2查看设备版本信息 3.3设备基本配置 &am…

PBV电流检测电阻±0.5% 10W 4-SIP通孔电阻器 脉冲耐受

EAK 电流检测精密电阻器系列为电流检测应用提供 4 端子通孔连接技术。该电阻器上的开尔文连接设计用于轻松安装散热器,即使在 0.0005Ω 至 1Ω 的极低电阻值范围内也能进行高精度测量。 电流检测精密电阻器 4端子通孔设计 电阻值 0.0005Ω 至 1Ω 公差选项为 0.5…

java多线程临界区介绍

在Java多线程编程中,"临界区"是指一段必须互斥执行的代码区域。当多个线程访问共享资源时,为了防止数据不一致或逻辑错误,需要确保同一时刻只有一个线程可以进入临界区。Java提供了多种机制来实现这一点,例如synchroniz…

基于Python的信号处理(包络谱,低通、高通、带通滤波,初级特征提取,机器学习,短时傅里叶变换)及轴承故障诊断探索

Python是一种广泛使用的解释型、高级和通用的编程语言,众多的开源科学计算软件包都提供了Python接口,如计算机视觉库OpenCV、可视化工具库VTK等。Python专用计算扩展库,如NumPy、SciPy、matplotlab、Pandas、scikit-learn等。 开发工具上可用…