提交 6785fead authored 作者: mooncake9527's avatar mooncake9527

add time

上级 4ab0d270
......@@ -14,6 +14,17 @@ const (
Layout_DateTime = "2006-01-02 15:04:05"
Layout_Date = "2006-01-02"
Layout_Time = "15:04:05"
Layout_YYYY = "2006"
Layout_YYYYMM = "2006-01"
Layout_YYYYMMDD = "2006-01-02"
Layout_YYYYMMDD2 = "2006/01/02"
Layout_YYYYMMDD3 = "20060102"
Layout_YYYYMMDDHHmmSS = "2006-01-02 15:04:05"
)
var (
LocBeiJing, _ = time.LoadLocation("Asia/Shanghai")
)
// 定义time.Time的别名
......@@ -78,13 +89,27 @@ func (t DateTime) Value() (driver.Value, error) {
}
// Scan value of time.Time
func (t *DateTime) Scan(v interface{}) error {
value, ok := v.(time.Time)
if ok {
*t = DateTime(value)
func (t *DateTime) Scan(value interface{}) error {
switch v := value.(type) {
case time.Time:
val, ok := value.(time.Time)
if ok {
*t = DateTime(val)
return nil
}
return fmt.Errorf("unsupported time format: %T", v)
case []uint8:
// 假设是RFC3339格式的二进制时间
str := string(v)
val, err := time.Parse(time.RFC3339, str)
if err != nil {
return err
}
*t = DateTime(val)
return nil
default:
return fmt.Errorf("unsupported time format: %T", v)
}
return fmt.Errorf("can not convert %v to timestamp", v)
}
func BeginOfDay(t time.Time) DateTime {
......@@ -164,19 +189,6 @@ func ParseExtendedDuration(s string) (time.Duration, error) {
return total, nil
}
const (
Layout_YYYY = "2006"
Layout_YYYYMM = "2006-01"
Layout_YYYYMMDD = "2006-01-02"
Layout_YYYYMMDD2 = "2006/01/02"
Layout_YYYYMMDD3 = "20060102"
Layout_YYYYMMDDHHmmSS = "2006-01-02 15:04:05"
)
var (
LocBeiJing, _ = time.LoadLocation("Asia/Shanghai")
)
func (x DateTime) Format(layout string) string {
return x.Time().Format(layout)
}
......
package xtime
import (
"database/sql/driver"
"fmt"
"strings"
"time"
)
type Time time.Time
func (t *Time) Scan(value interface{}) error {
switch v := value.(type) {
case []byte:
parsed, err := time.Parse("15:04:05", string(v))
if err != nil {
return err
}
*t = Time(parsed)
case string:
parsed, err := time.Parse("15:04:05", v)
if err != nil {
return err
}
*t = Time(parsed)
default:
return fmt.Errorf("unsupported type: %T", v)
}
return nil
}
func (t Time) Value() (driver.Value, error) {
return t.Time().Format("15:04:05"), nil
}
// MarshalJSON 自定义JSON序列化
func (t Time) MarshalJSON() ([]byte, error) {
return []byte(`"` + t.Time().Format("15:04:05") + `"`), nil
}
// UnmarshalJSON 自定义JSON反序列化
func (t *Time) UnmarshalJSON(data []byte) error {
str := strings.Trim(string(data), `"`)
parsed, err := time.Parse("15:04:05", str)
if err != nil {
return err
}
*t = Time(parsed)
return nil
}
// MarshalYAML 自定义YAML序列化
func (t Time) MarshalYAML() (interface{}, error) {
return t.Time().Format("15:04:05"), nil
}
func (t Time) Time() time.Time {
return time.Time(t)
}
// UnmarshalYAML 自定义YAML反序列化
func (t *Time) UnmarshalYAML(value interface{}) error {
str, ok := value.(string)
if !ok {
return fmt.Errorf("time-only must be a string")
}
parsed, err := time.Parse("15:04:05", str)
if err != nil {
return err
}
*t = Time(parsed)
return nil
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论