github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/core/scan.go (about)

     1  package core
     2  
     3  import (
     4  	"database/sql/driver"
     5  	"fmt"
     6  	"time"
     7  )
     8  
     9  type NullTime time.Time
    10  
    11  var (
    12  	_ driver.Valuer = NullTime{}
    13  )
    14  
    15  func (ns *NullTime) Scan(value interface{}) error {
    16  	if value == nil {
    17  		return nil
    18  	}
    19  	return convertTime(ns, value)
    20  }
    21  
    22  // Value implements the driver Valuer interface.
    23  func (ns NullTime) Value() (driver.Value, error) {
    24  	if (time.Time)(ns).IsZero() {
    25  		return nil, nil
    26  	}
    27  	return (time.Time)(ns).Format("2006-01-02 15:04:05"), nil
    28  }
    29  
    30  func convertTime(dest *NullTime, src interface{}) error {
    31  	// Common cases, without reflect.
    32  	switch s := src.(type) {
    33  	case string:
    34  		t, err := time.Parse("2006-01-02 15:04:05", s)
    35  		if err != nil {
    36  			return err
    37  		}
    38  		*dest = NullTime(t)
    39  		return nil
    40  	case []uint8:
    41  		t, err := time.Parse("2006-01-02 15:04:05", string(s))
    42  		if err != nil {
    43  			return err
    44  		}
    45  		*dest = NullTime(t)
    46  		return nil
    47  	case nil:
    48  	default:
    49  		return fmt.Errorf("unsupported driver -> Scan pair: %T -> %T", src, dest)
    50  	}
    51  	return nil
    52  }