Java - Parse string to its best match


DateTimeFormatter class a parseBest() method parses string for its best match.

The following snippet of code specifies OffsetDateTime, LocalDateTime, and LocalDate as the preferred parsed result types:

String text = ...
TemporalAccessor ta = formatter.parseBest(text,

The method will try to parse the text as the specified types in order and return the first successful result.

A call to the parseBest() method is followed by if-else statement with an instanceof operator to check what type of object was returned.

The following code shows how to use the parseBest() method.


import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAccessor;

public class Main {
  public static void main(String[] args) {
    DateTimeFormatter parser = DateTimeFormatter
    parseStr(parser, "2018-05-31");
    parseStr(parser, "2018-05-31T16:30:12");
    parseStr(parser, "2018-05-31T16:30:12-0500");
    parseStr(parser, "2018-05-31 wrong");
  }/* www. ja  v a  2s.  co  m*/

  public static void parseStr(DateTimeFormatter formatter, String text) {
    try {
      TemporalAccessor ta = formatter.parseBest(text, OffsetDateTime::from,
          LocalDateTime::from, LocalDate::from);
      if (ta instanceof OffsetDateTime) {
        OffsetDateTime odt = OffsetDateTime.from(ta);
        System.out.println("OffsetDateTime: " + odt);
      } else if (ta instanceof LocalDateTime) {
        LocalDateTime ldt = LocalDateTime.from(ta);
        System.out.println("LocalDateTime: " + ldt);
      } else if (ta instanceof LocalDate) {
        LocalDate ld = LocalDate.from(ta);
        System.out.println("LocalDate: " + ld);
      } else {
        System.out.println("Parsing returned: " + ta);
    } catch (DateTimeParseException e) {


Related Topic