function createDateTimeWithOffsetTransformer ({ disableLosslessIntegers, useBigInt }) {
  return new TypeTransformer({
    signature: DATE_TIME_WITH_ZONE_OFFSET,
    isTypeInstance: object => isDateTime(object) && object.timeZoneId == null,
    toStructure: value => {
      const epochSecond = localDateTimeToEpochSecond(
        value.year,
        value.month,
        value.day,
        value.hour,
        value.minute,
        value.second,
        value.nanosecond
      )
      const nano = int(value.nanosecond)
      const timeZoneOffsetSeconds = int(value.timeZoneOffsetSeconds)
      return new structure.Structure(DATE_TIME_WITH_ZONE_OFFSET, [epochSecond, nano, timeZoneOffsetSeconds])
    },
    fromStructure: struct => {
      structure.verifyStructSize(
        'DateTimeWithZoneOffset',
        DATE_TIME_WITH_ZONE_OFFSET_STRUCT_SIZE,
        struct.size
      )

      const [epochSecond, nano, timeZoneOffsetSeconds] = struct.fields

      const localDateTime = epochSecondAndNanoToLocalDateTime(epochSecond, nano)
      const result = new DateTime(
        localDateTime.year,
        localDateTime.month,
        localDateTime.day,
        localDateTime.hour,
        localDateTime.minute,
        localDateTime.second,
        localDateTime.nanosecond,
        timeZoneOffsetSeconds,
        null
      )
      return convertIntegerPropsIfNeeded(result, disableLosslessIntegers, useBigInt)
    }
  })
}
Creates the DateTime with Offset Transformer
@param {Object} param
@param {boolean} param.disableLosslessIntegers Disables lossless integers
@param {boolean} param.useBigInt Uses BigInt instead of number or Integer
@returns {TypeTransformer}