Scan implements the Scanner interface. The value type must be time.Time or string / []byte (formatted time-string), otherwise Scan fails.
(value any)
| 39 | // The value type must be time.Time or string / []byte (formatted time-string), |
| 40 | // otherwise Scan fails. |
| 41 | func (nt *NullTime) Scan(value any) (err error) { |
| 42 | if value == nil { |
| 43 | nt.Time, nt.Valid = time.Time{}, false |
| 44 | return |
| 45 | } |
| 46 | |
| 47 | switch v := value.(type) { |
| 48 | case time.Time: |
| 49 | nt.Time, nt.Valid = v, true |
| 50 | return |
| 51 | case []byte: |
| 52 | nt.Time, err = parseDateTime(v, time.UTC) |
| 53 | nt.Valid = (err == nil) |
| 54 | return |
| 55 | case string: |
| 56 | nt.Time, err = parseDateTime([]byte(v), time.UTC) |
| 57 | nt.Valid = (err == nil) |
| 58 | return |
| 59 | } |
| 60 | |
| 61 | nt.Valid = false |
| 62 | return fmt.Errorf("can't convert %T to time.Time", value) |
| 63 | } |
| 64 | |
| 65 | // Value implements the driver Valuer interface. |
| 66 | func (nt NullTime) Value() (driver.Value, error) { |