最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java日期工具類時(shí)間校驗(yàn)實(shí)現(xiàn)

 更新時(shí)間:2023年12月28日 11:31:03   作者:布丁吖  
一般項(xiàng)目中需要對入?yún)⑦M(jìn)行校驗(yàn),比如必須是一個(gè)合法的日期,本文就來介紹一下Java日期工具類時(shí)間校驗(yàn)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

嘚吧嘚

時(shí)間校驗(yàn)這個(gè)問題,我在網(wǎng)上找了很多資料,有用正則表達(dá)式的、有用格式工具類的。
其實(shí)都能實(shí)現(xiàn)時(shí)間校驗(yàn),既然兩種方式都能實(shí)現(xiàn),那么使用哪種方式更好呢?

先告訴大家一個(gè)結(jié)論吧,我更傾向于用日期工具類來實(shí)現(xiàn)。接下來給大家分析一下。

正則表達(dá)式

版本一

先來看一個(gè)簡單的日期的正則表達(dá)式的規(guī)則,年份4位數(shù)字,月份2位數(shù)字,日2位數(shù)字,時(shí)2位數(shù)字,分2位數(shù)字,秒2位數(shù)字。

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

但是日期校驗(yàn)真的是簡單的幾位數(shù)字的組合嗎?咱們來做個(gè)測試

在這里插入圖片描述

注意看第二個(gè)日期“2022-13-31 32:12:21”,這明顯是個(gè)錯(cuò)誤的日期,沒有13月,也沒有32時(shí),但是根據(jù)正則表達(dá)式來判斷的話,是符合規(guī)則的。所以說明我們的正則表達(dá)式的規(guī)則是不完善的。

版本二

1、年的規(guī)則就是4位數(shù)字(這里就這么簡單,也可以從19XX年開始)
2、月的2位數(shù)字的范圍是01-12
3、日的2位數(shù)字的范圍是01-31
4、時(shí)的2位數(shù)字的范圍是00-23
5、分的2位數(shù)字的范圍是00-59
5、秒的2位數(shù)字的范圍是00-59

于是可以得到下面這個(gè)正則表達(dá)式:

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])$";

進(jìn)過測試可以看到2022-13-31 32:12:21這個(gè)日期已經(jīng)被判定為錯(cuò)誤日期了。

在這里插入圖片描述

可是這就完了嗎?當(dāng)然沒有,在來看個(gè)例子:

在這里插入圖片描述

日期中還有一個(gè)特點(diǎn)就是,每4年會(huì)閏年,所以2月的最后一天到幾號,就不是那么簡單了

所以現(xiàn)在的表達(dá)式還需要完善閏年的規(guī)則。。。

版本三

閏年的規(guī)則如下:
(不知道的趕緊學(xué)習(xí)一下,這都不知道,太丟人了??)

一般的年份:除以4,有余數(shù)的是平年,沒有余數(shù)的是閏年,
整百的年份(世紀(jì)年):那么該年份除以400,有余數(shù)的是平年,沒有余數(shù)的是閏年。

在這里插入圖片描述

OK,規(guī)則有了,那開始寫正則表達(dá)式吧!

String regex = "這個(gè)正則表達(dá)式我寫不出來??。寫不出來的原因:正則表達(dá)式說白了只是個(gè)模板,好像不能做復(fù)雜的邏輯判斷。"

既然自己寫不出來,那就去網(wǎng)上查一下資料,看一下其他大神是怎么實(shí)現(xiàn)的。

在這里插入圖片描述

我找到一個(gè)判斷閏年的,但是前提是他把年份的范圍規(guī)定死了,然后把閏年窮舉出來,然后做一個(gè)簡單的邏輯控制。

也算是一定范圍內(nèi)實(shí)現(xiàn)了日期格式的判定。

也是這個(gè)原因讓我放棄了用正則表達(dá)式,本人對正則表達(dá)式研究比較淺薄,如果真的可以實(shí)現(xiàn)還希望大佬們可以指點(diǎn)一下。

SimpleDateFormat工具類

使用SimpleDateFormat工具類,就不需要考慮規(guī)則了,這些人家都考慮好了,咱們只需要定義日期格式就行了。

主要原理是:SimpleDateFormat不能格式化、格式化不對的時(shí)間字符串都是不符合規(guī)則的。

核心代碼如下:

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");
}

測試一下,可以看到日期字符串日期格式只要有一點(diǎn)不一致,就會(huì)被判定為不符合規(guī)則。

在這里插入圖片描述

然后再測試幾個(gè)錯(cuò)誤時(shí)間,可以看到2022-13-31 32:12:212023-02-31 00:15:00都被判定為格式錯(cuò)誤了!

在這里插入圖片描述

終于整理完了!

其實(shí)結(jié)果很簡單,但是我覺得過程也很重要,雖然走了很多彎路,但是值得被記錄下來。??

本來還有想梳理一下關(guān)于LocalDate東西,和java.util.Date對比一下,有什么區(qū)別,但是考慮到篇幅。。。就不放在一起了。??

到此這篇關(guān)于Java日期工具類時(shí)間校驗(yàn)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java日期時(shí)間校驗(yàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼

    Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼

    本篇文章主要介紹了Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • SpringMVC異常處理的三種方式

    SpringMVC異常處理的三種方式

    在SpringMVC中異常處理是一個(gè)重要的方面,它幫助我們有效地處理應(yīng)用程序中的異常情況,提高用戶體驗(yàn)和系統(tǒng)的穩(wěn)定性,這篇文章主要給大家介紹了關(guān)于SpringMVC異常處理的三種方式,需要的朋友可以參考下
    2024-02-02
  • Java分布式學(xué)習(xí)之Kafka消息隊(duì)列

    Java分布式學(xué)習(xí)之Kafka消息隊(duì)列

    Kafka是由Apache軟件基金會(huì)開發(fā)的一個(gè)開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費(fèi)者在網(wǎng)站中的所有動(dòng)作流數(shù)據(jù)
    2022-07-07
  • SpringBoot實(shí)現(xiàn)初始化的三種策略模式

    SpringBoot實(shí)現(xiàn)初始化的三種策略模式

    本文主要介紹了SpringBoot實(shí)現(xiàn)初始化的三種策略模式,包括默認(rèn)初始化策略、懶加載初始化策略和自定義初始化策略,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Java實(shí)現(xiàn)計(jì)算器的代碼

    Java實(shí)現(xiàn)計(jì)算器的代碼

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)計(jì)算器的詳細(xì)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Swift洗牌動(dòng)畫效果的實(shí)現(xiàn)方法

    Swift洗牌動(dòng)畫效果的實(shí)現(xiàn)方法

    這篇文章主要介紹了Swift洗牌動(dòng)畫效果的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2016-12-12
  • java通過模擬post方式提交表單實(shí)現(xiàn)圖片上傳功能實(shí)例

    java通過模擬post方式提交表單實(shí)現(xiàn)圖片上傳功能實(shí)例

    這篇文章主要介紹了java通過模擬post方式提交表單實(shí)現(xiàn)圖片上傳功能實(shí)例,涉及Java針對表單的提交操作響應(yīng)及文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • springboot 獲取訪問接口的請求的IP地址的實(shí)現(xiàn)

    springboot 獲取訪問接口的請求的IP地址的實(shí)現(xiàn)

    本文主要介紹了springboot獲取訪問接口的請求的IP地址的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java中Collections.sort排序函數(shù)用法詳解

    java中Collections.sort排序函數(shù)用法詳解

    本篇文章主要介紹了java中Collections.sort排序函數(shù)用法詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-12-12
  • Java中如何利用Set判斷List集合中是否有重復(fù)元素

    Java中如何利用Set判斷List集合中是否有重復(fù)元素

    在開發(fā)工作中,我們有時(shí)需要去判斷List集合中是否含有重復(fù)的元素,這時(shí)候我們不需要找出重復(fù)的元素,我們只需要返回一個(gè)?Boolean?類型就可以了,下面通過本文給大家介紹Java中利用Set判斷List集合中是否有重復(fù)元素,需要的朋友可以參考下
    2023-05-05

最新評論

方山县| 台州市| 会理县| 玉山县| 兴文县| 兰西县| 华阴市| 宣恩县| 宽甸| 垣曲县| 濉溪县| 卫辉市| 贵定县| 阿合奇县| 大洼县| 苍南县| 嘉祥县| 冕宁县| 盱眙县| 剑阁县| 隆回县| 敦煌市| 文山县| 景宁| 西和县| 延长县| 茌平县| 古田县| 修武县| 舟山市| 平利县| 云阳县| 洪江市| 梁山县| 东乡族自治县| 南部县| 沂源县| 乌兰察布市| 乐昌市| 讷河市| 秦安县|