欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

嘚吧嘚

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

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

正則表達式

版本一

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

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

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

在這里插入圖片描述

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

版本二

1、年的規(guī)則就是4位數(shù)字(這里就這么簡單,也可以從19XX年開始)
2、月的2位數(shù)字的范圍是01-12
3、日的2位數(shù)字的范圍是01-31
4、時的2位數(shù)字的范圍是00-23
5、分的2位數(shù)字的范圍是00-59
5、秒的2位數(shù)字的范圍是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這個日期已經(jīng)被判定為錯誤日期了。

在這里插入圖片描述

可是這就完了嗎?當然沒有,在來看個例子:

在這里插入圖片描述

日期中還有一個特點就是,每4年會閏年,所以2月的最后一天到幾號,就不是那么簡單了

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

版本三

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

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

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

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

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

SimpleDateFormat工具類

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

主要原理是:SimpleDateFormat不能格式化、格式化不對的時間字符串都是不符合規(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");
}

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

在這里插入圖片描述

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

在這里插入圖片描述

終于整理完了!

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

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

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

相關(guān)文章

  • java導出Excel通用方法的實例詳解

    java導出Excel通用方法的實例詳解

    這篇文章主要介紹了java導出Excel通用方法的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 使用maven創(chuàng)建普通項目命令行程序詳解

    使用maven創(chuàng)建普通項目命令行程序詳解

    大部分使用maven創(chuàng)建的是web項目,這里使用maven創(chuàng)建一個命令行程序,目的是讓大家了解maven特點和使用方式,有需要的朋友可以借鑒參考下
    2021-10-10
  • 解決lombok 父類和子類builder不兼容的問題

    解決lombok 父類和子類builder不兼容的問題

    這篇文章主要介紹了解決lombok 父類和子類builder不兼容的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 淺聊一下Java中的鎖機制

    淺聊一下Java中的鎖機制

    Java中的鎖機制是保證多線程并發(fā)訪問共享資源安全性的重要手段之一。Java提供了兩種類型的鎖機制:synchronized關(guān)鍵字和Lock接口。本文將介紹這兩種鎖機制的原理及使用方法,并通過代碼示例講解它們的使用
    2023-03-03
  • jdbc和mybatis的流式查詢使用方法

    jdbc和mybatis的流式查詢使用方法

    有些時候我們所需要查詢的數(shù)據(jù)量比較大,但是jvm內(nèi)存又是有限制的,數(shù)據(jù)量過大會導致內(nèi)存溢出。這個時候就可以使用流式查詢,本文就主要介紹了jdbc和mybatis的流式查詢,感興趣的可以了解一下
    2021-11-11
  • 使用Java進行FreeMarker的web模板開發(fā)的基礎(chǔ)教程

    使用Java進行FreeMarker的web模板開發(fā)的基礎(chǔ)教程

    這篇文章主要介紹了使用Java進行FreeMarker模板引擎開發(fā)的基礎(chǔ)教程,文中針對FreeMarker的網(wǎng)頁標簽用法給出了一些例子,需要的朋友可以參考下
    2016-03-03
  • 如何基于ssm框架實現(xiàn)springmvc攔截器

    如何基于ssm框架實現(xiàn)springmvc攔截器

    這篇文章主要介紹了如何基于ssm框架實現(xiàn)springmvc攔截器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • MyBatis復雜Sql查詢實現(xiàn)示例介紹

    MyBatis復雜Sql查詢實現(xiàn)示例介紹

    在利用mybatis做查詢的時候,一般返回結(jié)果用resulttype,這種情況必須是查詢的結(jié)果在對應 的pojo類中有對應的,一般都是單表查詢,但是對于一些復雜的情況,比如需要用到多表查詢的時候,resultType不再適用,此時一般用resultMap來表示返回的結(jié)果
    2022-12-12
  • 關(guān)于activemq安裝配置以及啟動錯誤的解決

    關(guān)于activemq安裝配置以及啟動錯誤的解決

    這篇文章主要介紹了關(guān)于activemq安裝配置以及啟動錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 關(guān)于Java中的實體類要?implements?Serializable的原因分析

    關(guān)于Java中的實體類要?implements?Serializable的原因分析

    這篇文章主要介紹了Java中的實體類為什么要?implements?Serializable,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06

最新評論