@Override
  public ZonedDateTime read(JsonReader reader) throws IOException {
    if (reader.peek() == JsonToken.NULL) {
      reader.nextNull();
      return null;
    }

    String timeZoneId = "";
    long secondsSinceEpoch = 0L;

    reader.beginObject();
    while (reader.hasNext()) {
      String name = reader.nextName();
      if (name.equals("text")) {
        // Ignore the human-readable rendering.
        reader.nextString();
      } else if (name.equals("time_zone")) {
        timeZoneId = reader.nextString();
      } else if (name.equals("value")) {
        secondsSinceEpoch = reader.nextLong();
      }
    }
    reader.endObject();

    return ZonedDateTime.ofInstant(
        Instant.ofEpochMilli(secondsSinceEpoch * 1000), ZoneId.of(timeZoneId));
  }
Read a Time object from a Directions API result and convert it to a {@link ZonedDateTime}.

<p>We are expecting to receive something akin to the following:

<pre>
{
  "text" : "4:27pm",
  "time_zone" : "Australia/Sydney",
  "value" : 1406528829
}
</pre>
src/main/java/com/google/maps/internal/ZonedDateTimeAdapter.java