code: public static Instant parseInstant(String value) {
      TemporalAccessor temporalAccessor =
          DateTimeFormatter.ofPattern(LOOSE_PARSER_FORMAT)
              .parseBest(value, ZonedDateTime::from, LocalDateTime::from, LocalDate::from);
      if (temporalAccessor instanceof ZonedDateTime) {
        return ((ZonedDateTime) temporalAccessor).toInstant();
      }
      if (temporalAccessor instanceof LocalDateTime) {
        return ((LocalDateTime) temporalAccessor).atZone(ZoneId.systemDefault()).toInstant();
      }
      return ((LocalDate) temporalAccessor).atStartOfDay(ZoneId.systemDefault()).toInstant();
    }
docs: Tries to parse a value representing an {@link Instant}. Tries many formats, but does require
  that the date month and year are provided in yyyy-mm-dd form. If too little information is
  provided, will fill in the start of day and getDefaultZoneId() as default values.
  
  @param value the value to parse.
  @return the parsed {@link Instant}
  @throws DateTimeParseException if parsing fails