func convertNvTime(v interface{}) (driver.Value, error) {

	if v == nil {
		return nil, nil
	}

	switch v := v.(type) {

	case time.Time:
		return v, nil
	}

	rv := reflect.ValueOf(v)

	switch rv.Kind() {

	case reflect.Ptr:
		// indirect pointers
		if rv.IsNil() {
			return nil, nil
		}
		return convertNvTime(rv.Elem().Interface())
	}

	if rv.Type().ConvertibleTo(typeOfTime) {
		tv := rv.Convert(typeOfTime)
		return tv.Interface().(time.Time), nil
	}

	return nil, fmt.Errorf("unsupported time conversion type error %[1]T %[1]v", v)
}
func convertNvTime(v interface{}) (driver.Value, error) {

	if v == nil {
		return nil, nil
	}

	switch v := v.(type) {

	case time.Time:
		return v, nil
	}

	rv := reflect.ValueOf(v)

	switch rv.Kind() {

	case reflect.Ptr:
		
		if rv.IsNil() {
			return nil, nil
		}
		return convertNvTime(rv.Elem().Interface())
	}

	if rv.Type().ConvertibleTo(typeOfTime) {
		tv := rv.Convert(typeOfTime)
		return tv.Interface().(time.Time), nil
	}

	return nil, fmt.Errorf("unsupported time conversion type error %[1]T %[1]v", v)
}
func convertNvTime ( v interface { } ) ( driver . Value , error ) { if v == nil { return nil , nil } switch v := v . ( type ) { case time . Time : return v , nil } rv := reflect . ValueOf ( v ) switch rv . Kind ( ) { case reflect . Ptr : // indirect pointers if rv . IsNil ( ) { return nil , nil } return convertNvTime ( rv . Elem ( ) . Interface ( ) ) } if rv . Type ( ) . ConvertibleTo ( typeOfTime ) { tv := rv . Convert ( typeOfTime ) return tv . Interface ( ) . ( time . Time ) , nil } return nil , fmt . Errorf ( " " , v ) }
// time
time