public ZonedDateTime toZonedDateTime(String date) { try { return ZonedDateTime.parse(date); } catch (Exception ignored) {} if (date == null) { return null; } date = sanitize(date); int posT = date.indexOf("T"); if (posT >= 0) { int posZ = date.indexOf("-", posT); if (posZ >= 0) { String zone = date.substring(posZ); date = date.substring(0, posZ); date += zone; return ZonedDateTime.parse(date); } else if (date.toUpperCase().endsWith("Z")) { LocalDateTime localDateTime = LocalDateTime.parse(date, getFormatter(date)); ZoneId zoneId = ZoneId.of("Z"); ZonedDateTime value = ZonedDateTime.of(localDateTime, zoneId); return value; } else { LocalDateTime localDateTime = LocalDateTime.parse(date, getFormatter(date)); return ZonedDateTime.of(localDateTime, zoneId); } } else { LocalDate localDate = LocalDate.parse(date, getFormatter(date)); return ZonedDateTime.of(localDate, LocalTime.MIDNIGHT, zoneId); } }