private static ZoneId _getZoneId(ColumnDefinition<?, ?> columnDefinition) {
    if (columnDefinition.has(JavaZoneIdProperty.class)) {
      return columnDefinition.lookFor(JavaZoneIdProperty.class).getZoneId();
    } else if (columnDefinition.has(TimeZoneProperty.class)) {
      return columnDefinition.lookFor(TimeZoneProperty.class).getTimeZone().toZoneId();
    }

    return null;
  }
  public static DateTimeFormatter getDateTimeFormatter(ColumnDefinition<?, ?> columnDefinition) {
    DateTimeFormatter dtf;

    if (columnDefinition.has(JavaDateTimeFormatterProperty.class)) {
      dtf = columnDefinition.lookFor(JavaDateTimeFormatterProperty.class).getFormatter();
    } else if (columnDefinition.has(DateFormatProperty.class)) {
      dtf =
          DateTimeFormatter.ofPattern(
              columnDefinition.lookFor(DateFormatProperty.class).getPattern());
    } else {
      throw new IllegalArgumentException("No date format pattern specified");
    }

    final ZoneId zoneId = _getZoneId(columnDefinition);

    if (zoneId != null) {
      dtf = dtf.withZone(zoneId);
    } else if (dtf.getZone() == null) {
      dtf = dtf.withZone(ZoneId.systemDefault());
    }

    return dtf;
  }