Java: Menyemak Format Tarikh Rentetan terhadap Keperluan Tertentu
Soalan:
Bagaimanakah saya boleh menentukan sama ada rentetan yang diberikan mengikut format tarikh tertentu dalam Java? Saya mahu mengelak daripada menukar rentetan kepada objek tarikh dan hanya fokus pada mengesahkan formatnya.
Jawapan:
Java 8 :
Gunakan kelas LocalDateTime, LocalDate dan LocalTime daripada API tarikh dan masa Java 8 untuk pengesahan format yang komprehensif.
Kod:
<code class="java">public static boolean isValidFormat(String format, String value, Locale locale) { LocalDateTime ldt = null; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format, locale); try { ldt = LocalDateTime.parse(value, formatter); String result = ldt.format(formatter); return result.equals(value); } catch (DateTimeParseException e) { try { LocalDate ld = LocalDate.parse(value, formatter); String result = ld.format(formatter); return result.equals(value); } catch (DateTimeParseException exp) { try { LocalTime lt = LocalTime.parse(value, formatter); String result = lt.format(formatter); return result.equals(value); } catch (DateTimeParseException e2) { // Handle exceptions for debugging purposes } } } return false; }</code>
Contoh Penggunaan:
<code class="java">System.out.println("isValid - dd/MM/yyyy with 20130925 = " + isValidFormat("dd/MM/yyyy", "20130925", Locale.ENGLISH)); System.out.println("isValid - dd/MM/yyyy with 25/09/2013 = " + isValidFormat("dd/MM/yyyy", "25/09/2013", Locale.ENGLISH)); System.out.println("isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = " + isValidFormat("dd/MM/yyyy", "25/09/2013 12:13:50", Locale.ENGLISH)); System.out.println("isValid - yyyy-MM-dd with 2017-18--15 = " + isValidFormat("yyyy-MM-dd", "2017-18--15", Locale.ENGLISH));</code>
Output:
isValid - dd/MM/yyyy with 20130925 = false isValid - dd/MM/yyyy with 25/09/2013 = true isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = false isValid - yyyy-MM-dd with 2017-18--15 = false
Pra-Java 8:
Untuk versi Java yang lebih awal, gunakan SimpleDateFormat untuk mengesahkan format.
Kod:
<code class="java">public static boolean isValidFormat(String format, String value) { Date date = null; try { SimpleDateFormat sdf = new SimpleDateFormat(format); date = sdf.parse(value); if (!value.equals(sdf.format(date))) { date = null; } } catch (ParseException ex) { ex.printStackTrace(); } return date != null; }</code>
Contoh Penggunaan dan Output:
<code class="java">System.out.println("isValid - dd/MM/yyyy with 20130925 = " + isValidFormat("dd/MM/yyyy", "20130925")); System.out.println("isValid - dd/MM/yyyy with 25/09/2013 = " + isValidFormat("dd/MM/yyyy", "25/09/2013")); System.out.println("isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = " + isValidFormat("dd/MM/yyyy", "25/09/2013 12:13:50"));</code>
isValid - dd/MM/yyyy with 20130925 = false isValid - dd/MM/yyyy with 25/09/2013 = true isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = false
Kedua-dua penyelesaian kembali benar jika rentetan sepadan dengan format yang ditentukan dan palsu sebaliknya, menyediakan kaedah yang boleh dipercayai untuk mengesahkan format tarikh dalam Java.
Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Format Rentetan Tarikh di Java tanpa Menghuraikan ke Objek Tarikh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!