@Override
        protected TimestampWritableV2 convert(Binary binary) {
          NanoTime nt = NanoTime.fromBinary(binary);
          Map<String, String> metadata = parent.getMetadata();
          // Current Hive parquet timestamp implementation stores timestamps in UTC, but other
          // components do not. In this case we skip timestamp conversion.
          // If this file is written by a version of hive before HIVE-21290, file metadata will
          // not contain the writer timezone, so we convert the timestamp to the system (reader)
          // time zone.
          // If file is written by current Hive implementation, we convert timestamps to the writer
          // time zone in order to emulate time zone agnostic behavior.
          boolean skipConversion = Boolean.parseBoolean(
              metadata.get(HiveConf.ConfVars.HIVE_PARQUET_TIMESTAMP_SKIP_CONVERSION.varname));
          String legacyConversion = metadata.get(DataWritableWriteSupport.WRITER_ZONE_CONVERSION_LEGACY);
          assert legacyConversion != null;
          ZoneId targetZone = skipConversion ? ZoneOffset.UTC : MoreObjects
              .firstNonNull(DataWritableReadSupport.getWriterTimeZoneId(metadata), TimeZone.getDefault().toZoneId());
          Timestamp ts = NanoTimeUtils.getTimestamp(nt, targetZone, Boolean.parseBoolean(legacyConversion));
          return new TimestampWritableV2(ts);
        }
ETypeConverter is an easy way to set the converter for the right type.
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java