| // Go MySQL Driver - A MySQL-Driver for Go's database/sql package | |
| // | |
| // Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. | |
| // | |
| // This Source Code Form is subject to the terms of the Mozilla Public | |
| // License, v. 2.0. If a copy of the MPL was not distributed with this file, | |
| // You can obtain one at http://mozilla.org/MPL/2.0/. | |
| package mysql | |
| import ( | |
| "database/sql/driver" | |
| "fmt" | |
| "time" | |
| ) | |
| // Scan implements the Scanner interface. | |
| // The value type must be time.Time or string / []byte (formatted time-string), | |
| // otherwise Scan fails. | |
| func (nt *NullTime) Scan(value interface{}) (err error) { | |
| if value == nil { | |
| nt.Time, nt.Valid = time.Time{}, false | |
| return | |
| } | |
| switch v := value.(type) { | |
| case time.Time: | |
| nt.Time, nt.Valid = v, true | |
| return | |
| case []byte: | |
| nt.Time, err = parseDateTime(v, time.UTC) | |
| nt.Valid = (err == nil) | |
| return | |
| case string: | |
| nt.Time, err = parseDateTime([]byte(v), time.UTC) | |
| nt.Valid = (err == nil) | |
| return | |
| } | |
| nt.Valid = false | |
| return fmt.Errorf("Can't convert %T to time.Time", value) | |
| } | |
| // Value implements the driver Valuer interface. | |
| func (nt NullTime) Value() (driver.Value, error) { | |
| if !nt.Valid { | |
| return nil, nil | |
| } | |
| return nt.Time, nil | |
| } |