code: public static String toStringIsoFormat(final ZonedDateTime date) {
          // we convert given date to UTC timezone and output in UTC format (ends with Z)
          return date != null ? date.withZoneSameInstant(ZoneOffset.UTC).format(ISO_8601_NANOS) : null;
      }
docs: <p>
  Returns the given <code>ZonedDateTime</code> in ISO format that readable by a wide range of
  clients.
  </p>
  
  <p>
  In general the format has these components:
  </p>
  <ul>
  <li>A date: <code>yyyy '-' MM '-' dd</code></li>
  <li>A time: <code>'T' HH ':' mm ':' ss</code></li>
  <li>Milliseconds: <code>('.' | ',') digit+</code></li>
  <li>UTC offset: <code>'Z'</code></li>
  </ul>
  
  Example: 2017-12-29T03:21:24.564000000Z
  
  @param date
  a zoned date/time value
  @return the given <code>ZonedDateTime</code> in ISO format
  
  @see <a href=
  "http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateOptionalTimeParser--">dateOptionalTimeParser</a>
  @see <a href=
  "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html#mapping-date-format">strict_date_optional_time</a>