docs: protected String getDefaultTimeFormatIfNull(Member c2jMemberDefinition, Map<String, Shape> allC2jShapes, String protocolString, Shape parentShape) {
          String timestampFormat = c2jMemberDefinition.getTimestampFormat();
  
          if (!StringUtils.isNullOrEmpty(timestampFormat)) {
              failIfInCollection(c2jMemberDefinition, parentShape);
              return TimestampFormat.fromValue(timestampFormat).getFormat();
          }
  
          String shapeName = c2jMemberDefinition.getShape();
          Shape shape = allC2jShapes.get(shapeName);
  
          if (!StringUtils.isNullOrEmpty(shape.getTimestampFormat())) {
              failIfInCollection(c2jMemberDefinition, parentShape);
              return TimestampFormat.fromValue(shape.getTimestampFormat()).getFormat();
          }
  
          String location = c2jMemberDefinition.getLocation();
          if (Location.HEADER.toString().equals(location)) {
              return defaultHeaderTimestamp();
          }
  
          if (Location.QUERY_STRING.toString().equals(location)) {
              return TimestampFormat.ISO_8601.getFormat();
          }
  
          Protocol protocol = Protocol.fromValue(protocolString);
  
          switch (protocol) {
              case REST_XML:
              case QUERY:
              case EC2:
              case API_GATEWAY:
                  return TimestampFormat.ISO_8601.getFormat();
              case ION:
              case REST_JSON:
              case AWS_JSON:
                  return TimestampFormat.UNIX_TIMESTAMP.getFormat();
              case CBOR:
                  return TimestampFormat.UNIX_TIMESTAMP_IN_MILLIS.getFormat();
          }
  
          throw new RuntimeException("Cannot determine timestamp format for protocol " + protocol);
      }