<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java – 日期驗證 > 原文: [https://howtodoinjava.com/java/date-time/date-validation/](https://howtodoinjava.com/java/date-time/date-validation/) 學習驗證給定的字符串是否包含日期值。 我們將學習 Java 7, [Java 8](https://howtodoinjava.com/java-8-tutorial/) 及更高版本中可用的各種**日期驗證**技術。 ## 1\. `DateTimeFormatter` – Java 8 * 最好的機會是您的應用程序已經在使用 Java 8 或更高版本。 在這種情況下,用 Java 表示日期的最佳方法是使用[`LocalDate`](https://howtodoinjava.com/java/date-time/java-time-localdate-class/)類。 * 默認情況下,`LocalDate.parse()`方法使用`ISO_LOCAL_DATE`模式(`yyyy-MM-dd`)解析日期。 格式包括: * 年份的四位數或更多,其中 0000 到 9999 的范圍將被補零,以確保四位數。 超出該范圍的年份將帶有前綴正號或負號。 * 一年中的兩位數字,并用零預填充以確保兩位數字。 * 每月中的兩位數字,并用零預填充以確保兩位數字。 * 如果我們有自己的自定義日期格式,則可以使用`DateTimeFormatter.ofPattern()`方法創建。 默認情況下,`ResolverStyle.SMART`用于每個日期字段使用明智的默認值。 例如,“天”字段的值大于 31 將是有效值,并將其視為月份的最后一天。 * 很多時候,這種智能解決方案無法滿足業務需求,如果遇到此類無效值,我們希望引發解析異常。 使用`ResolverStyle.STRICT`嚴格解析日期和時間。 使用嚴格的分辨率將確保所有解析的值都在該字段的有效值的外部范圍內。 * 使用`LocalDate`的`parse(dateString, dateTimeFormatter)`將字符串解析為`Localdate`實例。 * [`DateTimeFormatter`](https://howtodoinjava.com/java/date-time/java8-datetimeformatter-example/)實例是線程安全且不可變的,因此我們只能為每個模式/應用程序創建一個實例,并在其他函數之間共享它。 ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.time.format.ResolverStyle; public class JavaDateValidations { public static void main(String[] args) { String dateFormat = "MM-dd-yyyy"; String dateString = "05-26-2020"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(dateFormat) .withResolverStyle(ResolverStyle.STRICT); LocalDate parsedLocalDate = validateAndParseDateJava8(dateString, dateFormatter); System.out.println(parsedLocalDate); } //Java 8 - Use DateTimeFormatter (thread-safe) public static LocalDate validateAndParseDateJava8(String dateStr, DateTimeFormatter dateFormatter) { LocalDate date = null; try { date = LocalDate.parse(dateStr, dateFormatter); } catch (DateTimeParseException e) { e.printStackTrace(); } return date; } } ``` ## 2\. `SimpleDateFormat` – Java 7 * 如果您仍然對 Java 7 感到震驚,并且由于某些舊應用程序的依賴性而無法升級,則可以使用`SimpleDateFormat`進行日期驗證。 * 盡管`SimpleDateFormat`不是線程安全的或不可變的,但它仍然可以很好地達到目的。 不要在具有同步功能的多線程環境中使用此類。 * 不要忘記使用[`setLenient()`](https://howtodoinjava.com/java/date-time/strict-date-validation-simpledateformat-setlenient/)方法來指定寬大因素。 使用寬大的解析,解析器可能會使用啟發式方法來解釋與該對象的格式不完全匹配的輸入。 在嚴格分析的情況下,輸入內容必須與此對象的格式匹配。 * 然后,使用`SimpleDateFormat`的`parse(dateString)`方法,該方法將引發受檢的異常`ParseException`,該異常表示將日期字符串解析為`java.util.Date`對象時發生了一些錯誤。 ```java import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class JavaDateValidations { public static void main(String[] args) { String dateFormat = "MM-dd-yyyy"; String dateString = "05-26-2020"; Date parsedDate = validateAndParseDateJava7(dateString, dateFormat); System.out.println(parsedDate); } //Java 7 - Use SimpleDateFormat (not thread-safe) public static Date validateAndParseDateJava7(String dateString, String dateFormat) { Date date = null; DateFormat sdf = new SimpleDateFormat(dateFormat); sdf.setLenient(false); try { date = sdf.parse(dateString); } catch (ParseException e) { e.printStackTrace(); } return date; } } ``` ## 3\. 日期驗證的最佳做法 以下是一些在 Java 中驗證日期期間可以遵循的最佳實踐。 1. 盡管在 99% 的情況下不會有任何區別,但仍然可以考慮使用`'uuuu'`代替`'yyyy'`。 有關更多信息,請參考此 [SO 帖子](https://stackoverflow.com/questions/41177442/uuuu-versus-yyyy-in-datetimeformatter-formatting-pattern-codes-in-java)。 2. 使用相關方法(即`sdf.setLenient(false)`或`dtf.withResolverStyle(ResolverStyle.STRICT)`)使用嚴格的解析。 3. 盡管嚴格的日期解析解決了大多數問題,但仍應考慮使用額外的檢查 -- 例如,有效的解析日期必須在預定義的日期范圍內。 批量分析對日期敏感的記錄時,這可能非常有用。 例如,我們可以從大型 Excel 工作表中導入財務記錄時使用這種類型的驗證,因為手工工作出錯的可能性很高。 4. 如果您有將 Java 7 應用程序升級到 Java 8 的自由,請優先執行。 就性能而言,`DateTimeFormatter`的線程安全性和不變性是對`SimpleDateFormat`的巨大勝利。 在評論中給我您有關在 Java 中將字符串解析為日期對象的問題和建議。 學習愉快! [下載源碼](https://github.com/lokeshgupta1981/Core-Java/tree/master/src/com/howtodoinjava/core/datetime)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看