docs: public Time toTimeBin(TimeZone tz, byte[] bytes) throws PSQLException {
      if ((bytes.length != 8 && bytes.length != 12)) {
        throw new PSQLException(GT.tr("Unsupported binary encoding of {0}.", "time"),
            PSQLState.BAD_DATETIME_FORMAT);
      }
  
      long millis;
      int timeOffset;
  
      if (usesDouble) {
        double time = ByteConverter.float8(bytes, 0);
  
        millis = (long) (time * 1000);
      } else {
        long time = ByteConverter.int8(bytes, 0);
  
        millis = time / 1000;
      }
  
      if (bytes.length == 12) {
        timeOffset = ByteConverter.int4(bytes, 8);
        timeOffset *= -1000;
        millis -= timeOffset;
        return new Time(millis);
      }
  
      if (tz == null) {
        tz = getDefaultTz();
      }
  
      // Here be dragons: backend did not provide us the timezone, so we guess the actual point in
      // time
      millis = guessTimestamp(millis, tz);
  
      return convertToTime(millis, tz); // Ensure date part is 1970-01-01
    }