Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

DateTimeFormatter with multiple pattern not working

Both of these patterns working fine when tested separately but they are not working together in a single ofPattern { "[]" + "[]"} statement.

Please guide what am I missing here

import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class SampleProgram {
    
    private static final DateTimeFormatter dateTimeFormats = DateTimeFormatter.ofPattern(
            "[yyyy-MM-dd'T'HH:mm:ss.SSS]" + //: Year, month, day, 'T' separator, hour, minute, second, and milliseconds (e.g., 2023-05-21T12:34:56.789)
            "[yyyy-MM-dd'T'HH:mm:ss.SSSSSS]"  //: Year, month, day, 'T' separator, hour, minute, second, and microseconds (e.g., 2023-05-21T12:34:56.123456)
    );

    private static final String[] inputArray = new String[]{
        "2021-01-30T23:45:00.123",
        "2023-08-15T12:34:56.789123",
    };

    
    public static void main(String[] args) {
        
        for (var input : inputArray) {
            var ignore = LocalDateTime.parse(input, dateTimeFormats);
        }
        System.out.println("No exception occured!");
    }
}

Output:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Exception in thread "main" java.time.format.DateTimeParseException: Text '2023-08-15T12:34:56.789123' could not be parsed, unparsed text found at index 23
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at SampleProgram.main(SampleProgram.java:25)

>Solution :

You do not need any DateTimeFormatter because both of your date-time strings are in ISO 8601 format which is the default format used by java.time types.

public static void main(String[] args) {
    for (var input : inputArray) {
        var ignore = LocalDateTime.parse(input);
    }
    System.out.println("No exception occured!");
}

Output:

No exception occurred!

In case, you want to use your DateTimeFormatter, change it to make just the fraction-of-second part optional.

DateTimeFormatter dateTimeFormats = DateTimeFormatter.ofPattern(
                    "yyyy-MM-dd'T'HH:mm:ss[.[SSSSSS][SSS]]");

Online Demo

Learn more about the modern Date-Time API from Trail: Date Time.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading