private static long convertInt96BinaryToTimestamp(Binary value)
  {
    // based on prestodb parquet int96 timestamp conversion
    byte[] bytes = value.getBytes();

    // little endian encoding - need to invert byte order
    long timeOfDayNanos =
        Longs.fromBytes(bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]);
    int julianDay = Ints.fromBytes(bytes[11], bytes[10], bytes[9], bytes[8]);

    long ts = ((julianDay - JULIAN_EPOCH_OFFSET_DAYS) * MILLIS_IN_DAY) + (timeOfDayNanos / NANOS_PER_MILLISECOND);
    return ts;
  }
private static long convertInt96BinaryToTimestamp ( Binary value ) { byte [ ] bytes = value . getBytes ( ) ; long timeOfDayNanos = Longs . fromBytes ( bytes [ 7 ] , bytes [ 6 ] , bytes [ 5 ] , bytes [ 4 ] , bytes [ 3 ] , bytes [ 2 ] , bytes [ 1 ] , bytes [ 0 ] ) ; int julianDay = Ints . fromBytes ( bytes [ 11 ] , bytes [ 10 ] , bytes [ 9 ] , bytes [ 8 ] ) ; long ts = ( ( julianDay - JULIAN_EPOCH_OFFSET_DAYS ) * MILLIS_IN_DAY ) + ( timeOfDayNanos / NANOS_PER_MILLISECOND ) ; return ts ; }
convert deprecated parquet int96 nanosecond timestamp to a long, based on
https://github.com/prestodb/presto/blob/master/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetTimestampUtils.java#L56