Search code examples
javadatetimesimpledateformatjava-time

Reading a string in java to proper Date format


I have a string:

String inputDate = "18-FEB-24 10.02.33.578000000 AM";

I am trying to read it back and format it in YYYY-MM-DD HH:mm:ss.SSSSSS. I tried the SimpleDateFormat as well as DateTimeFormatter libraries but not able to read it back. Below code from chatgpt but its getting error "String cannot parse at index 3"

DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a", Locale.ENGLISH);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter);
String formattedDate = dateTime.format(outputFormatter);

Solution

  • DateTimeFormatterBuilder().parseCaseInsensitive()

    The problem is that FEB isn't the month abbreviation that Java expects - it's Feb.

    So you need to parse your string case-insensitively, which you can do by building the DateTimeFormatter using a builder, DateTimeFormatterBuilder.

    Here’s a complete example:

    import java.util.*;
    import java.time.*;
    import java.time.format.*;
    
    public class Test {
        public static void main (String[] args) throws Exception {
            String inputDate = "18-FEB-24 10.02.33.578000000 AM";
    
            // Build the parsing part in a case-insensitive manner.
            DateTimeFormatter inputFormatter = new DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .appendPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a")
                .toFormatter(Locale.ENGLISH);
    
            DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
            LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter);
            String formattedDate = dateTime.format(outputFormatter);
            System.out.println(formattedDate);
        }
    }