code: public static long getTimestampMillis(Binary timestampBinary) {
  		if (timestampBinary.length() != 12) {
  			throw new IllegalArgumentException("Parquet timestamp must be 12 bytes, actual " + timestampBinary.length());
  		}
  		byte[] bytes = timestampBinary.getBytes();
  
  		// little endian encoding - need to invert byte order
  		long timeOfDayNanos = ByteBuffer.wrap(new byte[] {bytes[7], bytes[6], bytes[5], bytes[4],
  			bytes[3], bytes[2], bytes[1], bytes[0]}).getLong();
  		int julianDay = ByteBuffer.wrap(new byte[] {bytes[11], bytes[10], bytes[9], bytes[8]}).getInt();
  
  		return julianDayToMillis(julianDay) + (timeOfDayNanos / NANOS_PER_MILLISECOND);
  	}
docs: Returns GMT timestamp from binary encoded parquet timestamp (12 bytes - julian date + time of day nanos).
  
  @param timestampBinary INT96 parquet timestamp
  @return timestamp in millis, GMT timezone