1 Star 0 Fork 0

qingbing / go-utils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
time.go 1.38 KB
一键复制 编辑 原始数据 按行查看 历史
qingbing 提交于 2024-05-02 23:34 . 时间添加格式字符串
package xztime
import (
"database/sql/driver"
"fmt"
sysTime "time"
)
type Time struct {
sysTime.Time
layout string
}
var TimeLayout = "2006-01-02 15:04:05"
// 在使用 json.Marshal 时触发
func (t Time) MarshalJSON() ([]byte, error) {
if t.layout == "" {
return []byte(fmt.Sprintf(`"%s"`, t.Format(TimeLayout))), nil
} else {
return []byte(fmt.Sprintf(`"%s"`, t.Format(t.layout))), nil
}
}
// 在使用 json.Unmarshal 时触发
func (t *Time) UnmarshalJSON(data []byte) error {
st, err := sysTime.Parse(`"`+TimeLayout+`"`, string(data))
if err != nil {
return err
}
*t = Time{Time: st}
return nil
}
func (t Time) Value() (driver.Value, error) {
var zeroTime sysTime.Time
if t.Time.UnixNano() == zeroTime.UnixNano() {
return nil, nil
}
return t.Time, nil
}
func (t *Time) Scan(v interface{}) error {
value, ok := v.(sysTime.Time)
if ok {
*t = Time{Time: value}
return nil
}
return fmt.Errorf("can not convert %v to timestamp", v)
}
// fmt.Printf 触发
func (t *Time) String() string {
if t.layout == "" {
return fmt.Sprintf(`"%s"`, t.Format(TimeLayout))
} else {
return fmt.Sprintf(`"%s"`, t.Format(t.layout))
}
}
// 当前时间
func Now() Time {
return Time{Time: sysTime.Now()}
}
// 根据字符解析时间
func Parse(layout, value string) (time Time, err error) {
t, err := sysTime.Parse(layout, value)
if err != nil {
return
}
time.Time = t
return
}
1
https://gitee.com/duqingbing/go-utils.git
git@gitee.com:duqingbing/go-utils.git
duqingbing
go-utils
go-utils
3f5828c3b20c

搜索帮助