Java日期工具类时间校验

news2024/11/16 23:34:53

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://www.coloradmin.cn/o/1339065.html

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

相关文章

Vue3-25-路由-路由的基本使用

对路由的理解 路由 : 就是前端对页面路径的拦截,根据不同的路径渲染不同的组件, 从而实现单页应用中的页面局部刷新的功能。安装路由依赖 根据使用的不同的包管理工具采用不同的命令, 常见的三种包管理工具和对应的命令如下&…

Hex文件介绍及制作

Hex文件介绍 一、文件格式介绍数据格式Hex文件例子常见类型字段 二、CRC校验计算eg.地址文件CRC计算:020000040127D2:0200000400FFFB eg.数据文件计算 三、生成hex文件用Excel生成 一、文件格式介绍 Hex文件是一种十六进制文件格式,可由notpad打开或者HexView app打…

【Hive_05】企业调优1(资源配置、explain、join优化)

1、 计算资源配置1.1 Yarn资源配置1.2 MapReduce资源配置 2、 Explain查看执行计划(重点)2.1 Explain执行计划概述2.2 基本语法2.3 案例实操 3、分组聚合优化3.1 优化说明(1)map-side 聚合相关的参数 3.2 优化案例 4、join优化4.1…

vivado 快速到慢速时钟之间的多循环

快速到慢速时钟之间的多循环 在下面的场景中,启动时钟CLK1是快速时钟,捕获时钟CLK2是慢时钟。如下图所示。 在下一示例中,启动时钟CLK1是快速时钟。捕获时钟CLK2较慢时钟假设CLK1是CLK2的频率的三(3)倍。如下图所示。…

docker小白第七天

docker小白第七天 tomcat安装 docker hub上面查找tomcat镜像 点进tomcat,可以看到下载镜像的命令。但是因为文件太大,并且是国外下载镜像很慢,所以我们从前期配置好的阿里云镜像仓库下载。 docker search tomcat docker pull tomcatdocker…

后端主流框架-SpringMvc-day2

Java中的文件下载 2 文件下载 文件下载:就是将服务器(表现在浏览器中)中的资源下载(复制)到本地磁盘; 2.1 前台代码 前台使用超链接,超链接转到后台控制器,在控制器通过流的方式…

Intel FPGA 技术开放日

概要 时间:2023.11.14 全天 ( 9:00 - 16: 20) 地点:北京望京. 凯悦酒店 主题内容:分享交流了Intel FPGA 产品技术优势和落地实践方案。 会议的议程 开场致词: FPGA业务,是几年前intel收购而…

虚拟环境和Pycharm中均有transforms仍报ModuleNotFoundError:No module named ‘transformers‘

问题:运行新模型,配置了新环境,下载了包后,仍然报ModuleNotFoundError:No module named transformers 错误。 查看Pycharm解释器: 没问题!!!? 命令行查看虚…

Flink Job 执行流程

Flink On Yarn 模式 ​ 基于Yarn层面的架构类似 Spark on Yarn模式,都是由Client提交App到RM上面去运行,然后 RM分配第一个container去运行AM,然后由AM去负责资源的监督和管理。需要说明的是,Flink的Yarn模式更加类似Spark on Ya…

Hive安装笔记——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

将下发的ds_db01.sql数据库文件放置mysql中 12、编写Scala代码,使用Spark将MySQL的ds_db01库中表user_info的全量数据抽取到Hive的ods库中表user_info。字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String&am…

【电商项目实战】基于SpringBoot完成首页搭建

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…

【PyQt学习篇 · ⑭】:QTableView的使用

文章目录 QTableView的使用示例 QTableView的使用 QTableView 是 PyQt 中用于显示表格数据的窗口部件,它提供了一个灵活的方式来显示和编辑数据。下面是一些关于 QTableView 的使用的具体信息: 创建 QTableView 对象: from PyQt5.QtWidgets …

计算机网络基础:OSI参考模型是什么?

一、概述 OSI (Open Systems Interconnection Model,开放式系统互联模型),由ISO ( International Organization for Standardization,国际标准化组织 ) 收录在ISO 7489标准中并于1984年发布。 意义: 在OSI没有出来之前我们的网络有如下问题…

Linux Debian12使用podman安装upload-labs靶场环境

一、upload-labs简介 PHP语言编写,持续收集渗透测试和CTF中针对文件上传漏洞的靶场,总共21关,每一关都包含着不同的上传绕过方式。 二、安装podman环境 Linux Debian系统如果没有安装podman容器环境,可以参考这篇文章先安装pod…

如何在vscode当中预览html文件运行结果

如何在vscode当中预览html文件运行结果 下载拓展内容打开拓展界面下载拓展 运行html文件参考内容 上一篇文章当中讲了如何实现在网页上对html文件的预览,但是这样子其实在运行代码的过程当中效果比较差,那么还需要可以实时预览运行的结果 下载拓展内容 打开拓展界面 下载拓展 …

微信小程序发放红包封面及领取

微信小程序发放红包封面及领取 一、微信红包封面开放平台配置发放的红包封面二、小程序后管平台设置配置录入红包封面奖品信息三、微信小程序调用接口效果 一、微信红包封面开放平台配置发放的红包封面 微信红包封面开放平台 红包封面的发放方式有:领取二维码、领…

unity 保存和加载窗口布局

这么简单的事网上一堆废话文章 右上角,Layout点开后有保存和删除 要切换布局点红框里的已经保存的布局

Linux下MQTT环境的简单应用及搭建——之Mosquitto

文章目录 前言一、ubuntu搭建mqtt服务器 | 概要二、整体架构流程 | 技术实现细节1、下载源码2、安装Mosquitto3、解压并修改配置文件4、关于Mosquitto常见的一些操作指令5、启动mosquitto6、测试mosquitto测试1:Linux多终端交互测试测试2:Linux与Windows…

2023安洵杯-秦岭防御军wp

reverse 感觉有点点简单## import base64 def ba64_decode(str1_1):mapp "4KBbSzwWClkZ2gsr1qAQu0FtxOm6/iVcJHPY9GNp7EaRoDf8UvIjnL5MydTX3eh"data_1 [0] * 4flag_1 [0] * 3for i in range(32, 127):for y in range(32, 127):for k in range(32, 127):flag_1[0]…

MIT线性代数笔记-第30讲-奇异值分解

目录 30.奇异值分解打赏 30.奇异值分解 奇异值分解(简称 S V D SVD SVD分解)可以将一个比较复杂的矩阵用更小更简单的几个子矩阵相乘来表示,这些小矩阵描述的都是矩阵的重要的特性。奇异值分解在图形降噪、推荐系统中都有很重要的应用。 对…