Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengesahkan Format Rentetan Tarikh di Java tanpa Menghuraikan ke Objek Tarikh?

Bagaimana untuk Mengesahkan Format Rentetan Tarikh di Java tanpa Menghuraikan ke Objek Tarikh?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 07:22:02804semak imbas

How to Validate a Date String Format in Java without Parsing to a Date Object?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn