Files
grafana/pkg/storage/legacysql/time.go
T

60 lines
931 B
Go

package legacysql
import (
"database/sql/driver"
"fmt"
"time"
)
type DBTime struct {
time.Time
}
func NewDBTime(t time.Time) DBTime {
return DBTime{Time: t}
}
func (t DBTime) Value() (driver.Value, error) {
if t.IsZero() {
return nil, nil
}
return t.Format(time.DateTime), nil
}
func (t DBTime) String() string {
if t.IsZero() {
return ""
}
return t.Format(time.DateTime)
}
func (t *DBTime) Scan(value interface{}) error {
if value == nil {
t.Time = time.Time{}
return nil
}
var parsedTime time.Time
var err error
switch v := value.(type) {
case []byte:
parsedTime, err = time.Parse(time.DateTime, string(v))
case string:
parsedTime, err = time.Parse(time.DateTime, v)
case time.Time:
parsedTime = v
default:
return fmt.Errorf("could not scan type %T into DBTime", value)
}
if err != nil {
return fmt.Errorf("could not parse time: %w", err)
}
t.Time = parsedTime
return nil
}