Java日期工具类时间校验

Java日期工具类时间校验

    • 嘚吧嘚
    • 正则表达式
      • 版本一
      • 版本二
      • 版本三
    • SimpleDateFormat工具类

嘚吧嘚

时间校验这个问题,我在网上找了很多资料,有用正则表达式的、有用格式工具类的。🤨
其实都能实现时间校验,既然两种方式都能实现,那么使用哪种方式更好呢?🤔

先告诉大家一个结论吧,我更倾向于用日期工具类来实现。接下来给大家分析一下。

正则表达式

版本一

先来看一个简单的日期的正则表达式的规则,年份4位数字,月份2位数字,日2位数字,时2位数字,分2位数字,秒2位数字。

String regex = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$";

但是日期校验真的是简单的几位数字的组合吗?咱们来做个测试
在这里插入图片描述
注意看第二个日期“2022-13-31 32:12:21”,这明显是个错误的日期,没有13月,也没有32时,但是根据正则表达式来判断的话,是符合规则的。所以说明我们的正则表达式的规则是不完善的。

版本二

1、年的规则就是4位数字(这里就这么简单,也可以从19XX年开始)
2、月的2位数字的范围是01-12
3、日的2位数字的范围是01-31
4、时的2位数字的范围是00-23
5、分的2位数字的范围是00-59
5、秒的2位数字的范围是00-59

于是可以得到下面这个正则表达式:

String regex = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) ([0-2][0-3]):([0-5][0-9]):([0-5][0-9])$";

进过测试可以看到2022-13-31 32:12:21这个日期已经被判定为错误日期了。
在这里插入图片描述
可是这就完了吗?当然没有😮‍💨,在来看个例子:
在这里插入图片描述
日期中还有一个特点就是,每4年会闰年,所以2月的最后一天到几号,就不是那么简单了🤯

所以现在的表达式还需要完善闰年的规则。。。

版本三

闰年的规则如下:
(不知道的赶紧学习一下,这都不知道,太丢人了🥴)

一般的年份:除以4,有余数的是平年,没有余数的是闰年,
整百的年份(世纪年):那么该年份除以400,有余数的是平年,没有余数的是闰年。

在这里插入图片描述
OK,规则有了,那开始写正则表达式吧!

String regex = "这个正则表达式我写不出来😭。写不出来的原因:正则表达式说白了只是个模板,好像不能做复杂的逻辑判断。"

既然自己写不出来,那就去网上查一下资料,看一下其他大神是怎么实现的。
在这里插入图片描述
我找到一个判断闰年的,但是前提是他把年份的范围规定死了,然后把闰年穷举出来,然后做一个简单的逻辑控制。

也算是一定范围内实现了日期格式的判定。

也是这个原因让我放弃了用正则表达式,本人对正则表达式研究比较浅薄,如果真的可以实现还希望大佬们可以指点一下🤝。

SimpleDateFormat工具类

使用SimpleDateFormat工具类,就不需要考虑规则了,这些人家都考虑好了,咱们只需要定义日期格式就行了。

主要原理是:SimpleDateFormat不能格式化、格式化不对的时间字符串都是不符合规则的。

核心代码如下:

public static boolean isValidDate(String dateStr, String dateFormatPattern) {SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatPattern);dateFormat.setLenient(false);try {Date parsedDate = dateFormat.parse(dateStr);return dateStr.equals(dateFormat.format(parsedDate));} catch (ParseException e) {return false;}
}

再封装一层

public static boolean isValidDate(String dateStr) {return isValidDate(dateStr, "yyyy-MM-dd HH:mm:ss");
}

测试一下,可以看到日期字符串日期格式只要有一点不一致,就会被判定为不符合规则。
在这里插入图片描述
然后再测试几个错误时间,可以看到2022-13-31 32:12:212023-02-31 00:15:00都被判定为格式错误了!
在这里插入图片描述
终于整理完了!😮‍💨

其实结果很简单,但是我觉得过程也很重要,虽然走了很多弯路,但是值得被记录下来。😊

本来还有想梳理一下关于LocalDate东西,和java.util.Date对比一下,有什么区别,但是考虑到篇幅。。。就不放在一起了。👋

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2660270.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

StringBuilder、StringBuffer

StringBuilder StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的。好处:StringBuilder比String更适合做字符串的修该操作,效率会更高,代码也会更简洁…

那些关于股票交易主机托管你需要知道的事儿!

什么是主机托管?主机托管是一种服务,客户可以将自己的硬件服务器托管给服务商,并享受专业的服务器托管服务。这种服务包括稳定的网络带宽、恒温、防尘、防火、防潮、防静电等。客户拥有对服务器的完全控制权限,可以自主决定运行的…

UG NX二次开发(C++)-通过两点和高度创建长方体

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、采用UFun函数来创建长方体3、采用NXOpen方法实现两点和高度创建长方体4、验证1、前言 在UG NX二次开发时,我们通常会采用ufun函数来完成功能的开发,但是有些功能在ufun函数中不能找到…

堡垒机的演变过程

堡垒机的概念源自跳板机(前置机)。早在20世纪90年代末21世纪初期,部分中大型企业为了能对运维人员的远程登录进行集中管理,会在机房部署一台跳板机。跳板机其实就是一台unix/windows操作系统的服务器。并且所有运维人员都需要先远…

谷粒商城篇章7 ---- P211-P235 ---- 认证服务【分布式高级篇四】

目录 1 环境搭建 1.1 新建认证服务模块gulimall-auth-server 1.2 认证服务模块基础配置 1.2.1 pom.xml 1.2.2 yml配置 1.2.2.1 application.yml配置 1.2.2.2 bootstrap.yml配置 1.2.3 主类 1.3 SwitchHosts增加配置 1.4 认证页面搭建 1.5 网关配置 1.6 新增视图映…

基于动态窗口的航线规划

MATLAB2016b可以运行 % ------------------------------------------------------------------------- % File : DWA 算法 % Discription : Mobile Robot Motion Planning with Dynamic Window Approach % Author :Yuncheng Jiang % License : Modified BSD Software License A…

紧固件行业的市场规模和增长率是怎样的,主要市场区域有哪些?

分析标准件行业市场容量和增长率 标准件指的是在各种工业设备中广泛使用的连接件,通常由螺栓、螺帽、垫圈等组成。它能够将两个或两个以上的零件牢固地固定在一起,起到传递力量或者关闭效果的作用。标准件是机械制造、汽车、航空、电子、建筑等行业中不…

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录 之前发布过Window方式,这次结合以上主题,完善下Linux相关登入方式过程,纯属做个记录,有需要的朋友可以做个学习参考。 一、Windows环境提示“‘mysql’ 不是内部或外部命令,也不是可运行的程序或批…

【SpringSecurity】之授权的使用案例

一、引言 1、什么是SpringSecurity授权 Spring Security授权是指基于Spring Security框架的访问控制过程。授权是指根据系统提前设置好的规则,给用户分配可以访问某一个资源的权限,用户根据自己所具有的权限,去执行相应操作。在Spring Secu…

Redis 核心知识总结

Redis 核心知识总结 认识 Redis 什么是 Redis? Redis 是一个由 C 语言开发并且基于内存的键值型数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 有以下几个特…

jQuery-1.7.2存在任意文件读取漏洞

jQuery是一个快速、简洁的JavaScript框架,是一个丰富的JavaScript代码库,其1.7.2版本的sys_dia_data_down模块存在任意文件读取漏洞,攻击者可通过前台读取任意文件。 1.漏洞级别 高危 2.漏洞搜索 fofa body"webui/js/jquerylib/jquery-1.7.2.m…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第四节 参数传递对堆栈的影响1 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](http…

【银行测试】金融银行-理财项目面试/分析总结(二)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行理财相关的项…

小波如何让研究人员转换和理解数据?

在日益数据驱动的世界中,被称为小波的数学工具已成为分析和理解信息不可或缺的方法。许多研究人员以连续信号的形式接收他们的数据,这意味着随着时间的推移,信息流不断演变,例如地球物理学家聆听从地下岩层反弹的声波,…

客服软件如何提升企业客户满意度?

互联网的快速发展,越来越多的企业开始关注客户满意度的提升。客户满意度是企业成功的关键因素之一,而客服软件作为提升客户满意度的重要工具,正逐渐受到企业的重视。那么,客服软件如何提升企业客户满意度呢? 一、提高客户服务效率…

stm32项目(17)——基于stm32的温湿度检测protues仿真

1.功能设计 基于stm32单片机,驱动DHT11芯片,检测温度与湿度,并通过串口打印出来。 仿真图如下所示: 2.模块介绍 DHT11模块是一种低成本的数字温湿度传感器模块,常用于测量环境的温度和湿度。它由一个温湿度传感器和一…

MySQL事务、四大原则、执行步骤、四种隔离级别、锁、脏读、脏写等

MySQL事务 MySQL事务1.什么是事务?2.事务的四大原则3.事务执行的步骤4、事务的隔离性5、MySQL中的锁 MySQL事务 模拟一个转账业务: 上图中的sql语句: update from table set money mongey - 100 where name A; update from table set mone…

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

python打包项目pyinstaller的使用及问题解决

前言 在使用python编写了一个小程序之后,希望能够将其打包为一个可执行文件,如exe格式,这样就能够在其他电脑上安装使用,因此,打包python项目是一个普遍的需求。 配置 平台:windows10 工具:vi…

像美团一样商家入驻的小程序功能

美团一样的商家入驻小程序可以促进本地化商家的线上线下融合,为本地商家和用户提供更好的服务和体验,是一种数字化转型和创新,想要开发像美团一样的商家入驻小程序,需要具备以下功能: 1、不同行业独立频道 为本地化的…