提交 d7d3be58 authored 作者: mooncake9527's avatar mooncake9527

update xtime

上级 4095a391
...@@ -3,7 +3,6 @@ package xtime ...@@ -3,7 +3,6 @@ package xtime
import ( import (
"database/sql/driver" "database/sql/driver"
"fmt" "fmt"
"reflect"
"regexp" "regexp"
"strconv" "strconv"
"time" "time"
...@@ -20,31 +19,12 @@ const ( ...@@ -20,31 +19,12 @@ const (
// 定义time.Time的别名 // 定义time.Time的别名
type DateTime time.Time type DateTime time.Time
func (ct *DateTime) UnmarshalParam(src string) error {
field, _ := reflect.TypeOf(ct).Elem().FieldByName("DateTime")
format := field.Tag.Get("format")
if format == "" {
format = time.DateTime
}
t, err := time.Parse(format, src)
if err != nil {
return fmt.Errorf("time format should be %s", format)
}
*ct = DateTime(t)
return nil
}
// 自定义json序列化 // 自定义json序列化
func (x DateTime) MarshalJSON() ([]byte, error) { func (x DateTime) MarshalJSON() ([]byte, error) {
if x.IsZero() { if x.IsZero() {
return []byte(`""`), nil return []byte(`""`), nil
} }
field, _ := reflect.TypeOf(x).Elem().FieldByName("DateTime") var jsonTimeStr = fmt.Sprintf(`"%s"`, time.Time(x).Format("2006-01-02 15:04:05"))
format := field.Tag.Get("format")
if format == "" {
format = "2006-01-02 15:04:05"
}
var jsonTimeStr = fmt.Sprintf(`"%s"`, time.Time(x).Format(format))
return []byte(jsonTimeStr), nil return []byte(jsonTimeStr), nil
} }
...@@ -54,12 +34,7 @@ func (x *DateTime) UnmarshalJSON(data []byte) error { ...@@ -54,12 +34,7 @@ func (x *DateTime) UnmarshalJSON(data []byte) error {
*x = DateTime{} *x = DateTime{}
return nil return nil
} }
field, _ := reflect.TypeOf(x).Elem().FieldByName("DateTime") t, err := time.Parse(`"2006-01-02 15:04:05"`, string(data))
format := field.Tag.Get("format")
if format == "" {
format = "2006-01-02 15:04:05"
}
t, err := time.Parse(format, string(data))
if err != nil { if err != nil {
return err return err
} }
......
package xtime
//
//const (
// Layout_YYYYMMMDDHHMMSS = "20060102150405"
// Layout_DateTimeWithMS = "2006-01-02 15:04:05.000"
// Layout_DateTime = "2006-01-02 15:04:05"
// Layout_Date = "2006-01-02"
// Layout_Time = "15:04:05"
//)
//
//// 定义time.Time的别名
//type DateTime time.Time
//
//func (ct *DateTime) UnmarshalParam(src string) error {
// field, _ := reflect.TypeOf(ct).Elem().FieldByName("DateTime")
// format := field.Tag.Get("format")
// if format == "" {
// format = time.DateTime
// }
// t, err := time.Parse(format, src)
// if err != nil {
// return fmt.Errorf("time format should be %s", format)
// }
// *ct = DateTime(t)
// return nil
//}
//
//// 自定义json序列化
//func (x DateTime) MarshalJSON() ([]byte, error) {
// if x.IsZero() {
// return []byte(`""`), nil
// }
// field, _ := reflect.TypeOf(x).Elem().FieldByName("DateTime")
// format := field.Tag.Get("format")
// if format == "" {
// format = "2006-01-02 15:04:05"
// }
// var jsonTimeStr = fmt.Sprintf(`"%s"`, time.Time(x).Format(format))
// return []byte(jsonTimeStr), nil
//}
//
//// 自定义json反序列化
//func (x *DateTime) UnmarshalJSON(data []byte) error {
// if len(data) == 0 || string(data) == `""` {
// *x = DateTime{}
// return nil
// }
// field, _ := reflect.TypeOf(x).Elem().FieldByName("DateTime")
// format := field.Tag.Get("format")
// if format == "" {
// format = "2006-01-02 15:04:05"
// }
// t, err := time.Parse(format, string(data))
// if err != nil {
// return err
// }
// *x = DateTime(t)
// return nil
//}
//
//func (x DateTime) Time() time.Time {
// return time.Time(x)
//}
//
//func (x DateTime) IsZero() bool {
// return x.Time().IsZero()
//}
//func (x DateTime) IsNotZero() bool {
// return !x.IsZero()
//}
//
//func NewDateTime(t time.Time) DateTime {
// return DateTime(t)
//}
//
//func Now() DateTime {
// return DateTime(time.Now())
//}
//
//func NowPtr() *DateTime {
// j := DateTime(time.Now())
// return &j
//}
//
//const TimeFormat = "2006-01-02 15:04:05"
//
//// Value insert timestamp into mysql need this function.
//func (t DateTime) Value() (driver.Value, error) {
// var zeroTime time.Time
// if time.Time(t).UnixNano() == zeroTime.UnixNano() {
// return nil, nil
// }
// return time.Time(t), nil
//}
//
//// Scan value of time.Time
//func (t *DateTime) Scan(v interface{}) error {
// value, ok := v.(time.Time)
// if ok {
// *t = DateTime(value)
// return nil
// }
// return fmt.Errorf("can not convert %v to timestamp", v)
//}
//
//func BeginOfDay(t time.Time) DateTime {
// y, m, d := t.Date()
// begin := time.Date(y, m, d, 0, 0, 0, 0, t.Location())
// return DateTime(begin)
//}
//
//func EndOfDay(t time.Time) DateTime {
// y, m, d := t.Date()
// end := time.Date(y, m, d, 23, 59, 59, int(time.Second-time.Nanosecond), t.Location())
// return DateTime(end)
//}
//
//func TodayBegin() DateTime {
// t := time.Now()
// y, m, d := t.Date()
// begin := time.Date(y, m, d, 0, 0, 0, 0, t.Location())
// return DateTime(begin)
//}
//
//func TodayEnd() DateTime {
// t := time.Now()
// y, m, d := t.Date()
// end := time.Date(y, m, d, 23, 59, 59, int(time.Second-time.Nanosecond), t.Location())
// return DateTime(end)
//}
//
//var durationRegex = regexp.MustCompile(`(\d+)([a-zA-Z]+)`)
//
//func ParseExtendedDuration(s string) (time.Duration, error) {
// matches := durationRegex.FindAllStringSubmatch(s, -1)
// if len(matches) == 0 {
// return 0, fmt.Errorf("invalid format: %q", s)
// }
//
// // 验证完整匹配
// var matched string
// for _, m := range matches {
// matched += m[0]
// }
// if matched != s {
// return 0, fmt.Errorf("invalid characters in duration: %q", s)
// }
//
// var total time.Duration
// for _, match := range matches {
// numStr := match[1]
// unit := match[2]
// // unit := strings.ToUpper(match[2])
// num, err := strconv.ParseInt(numStr, 10, 64)
// if err != nil {
// return 0, fmt.Errorf("invalid number %q: %v", numStr, err)
// }
//
// var d time.Duration
// switch unit {
// case "d", "D":
// d = time.Duration(num) * 24 * time.Hour
// case "w", "W":
// d = time.Duration(num) * 7 * 24 * time.Hour
// case "M":
// d = time.Duration(num) * 30 * 24 * time.Hour
// case "y", "Y":
// d = time.Duration(num) * 365 * 24 * time.Hour
// default:
// // 回退到标准库解析
// if dur, err := time.ParseDuration(match[0]); err == nil {
// d = dur
// } else {
// return 0, fmt.Errorf("unknown unit %q", unit)
// }
// }
// total += d
// }
//
// 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)
//}
//func (x DateTime) FormatYYYYMMDDHHmmSS() string {
// return x.Time().Format(Layout_YYYYMMDDHHmmSS)
//}
//
//// const TimeFormat = "2006-01-02 15:04:05"
//
//// // Value insert timestamp into mysql need this function.
//// func (t DateTime) Value() (driver.Value, error) {
//// var zeroTime time.Time
//// if time.Time(t).UnixNano() == zeroTime.UnixNano() {
//// return nil, nil
//// }
//// return time.Time(t), nil
//// }
//
//// // Scan value of time.Time
//// func (t *DateTime) Scan(v interface{}) error {
//// value, ok := v.(time.Time)
//// if ok {
//// *t = DateTime(value)
//// return nil
//// }
//// return fmt.Errorf("can not convert %v to timestamp", v)
//// }
//
//func (x DateTime) Date() DateTime {
// y, m, d := x.Time().Date()
// trimmedTime := time.Date(y, m, d, 0, 0, 0, 0, x.Time().Location())
// return NewDateTime(trimmedTime)
//}
//
//func (x DateTime) WeekStart() DateTime {
// return x.WeekEnd().AddDate(0, 0, -6)
//}
//
//func (x DateTime) WeekEnd() DateTime {
// weekday := int(x.Time().Weekday())
// if weekday == 0 {
// weekday = 7
// }
// return x.AddDate(0, 0, +7-weekday)
//}
//
//func (t0 DateTime) MonthStart() DateTime {
// year, month, _ := t0.Time().Date()
// t1 := time.Date(year, month, 1, 0, 0, 0, 0, t0.Time().Location())
// return DateTime(t1)
//}
//
//func (t0 DateTime) MonthEnd() DateTime {
// year, month, _ := t0.Time().Date()
// t1 := time.Date(year, month+1, 0, 0, 0, 0, 0, t0.Time().Location())
// return DateTime(t1)
//}
//
//func (t DateTime) AddDate(y, m, d int) DateTime {
// return DateTime(t.Time().AddDate(y, m, d))
//}
//
//// WeekDay 1-7 周一到周日
//func (x DateTime) WeekDay() int {
// return ((int(x.Time().Weekday()) + 6) % 7) + 1
//}
//
//// 1-31 1号到31号
//func (x DateTime) Day() int {
// return int(x.Time().Day())
//}
//
//// 1-12 1月到12月
//func (x DateTime) Month() int {
// return int(x.Time().Month())
//}
//
//// 1970年到现在第几年
//func (x DateTime) Year() int {
// return int(x.Time().Year())
//}
//func (x DateTime) After(t1 DateTime) bool {
// return x.Time().After(t1.Time())
//}
//
//// 转为北京时间
//func (x DateTime) LocalBeiJing() DateTime {
// return DateTime(x.Time().In(LocBeiJing))
//}
//
//func (x DateTime) Local() DateTime {
// return DateTime(x.Time().In(time.Local))
//}
//
//func (x DateTime) Quarter() int {
// return (int(x.Time().Month())-1)/3 + 1
//}
//
//func ParseYYYYMMDD(value string) DateTime {
// t, err := time.Parse(Layout_YYYYMMDD, value)
// if err != nil {
// return DateTime{}
// }
// return DateTime(t)
//}
//func ParseYYYYMMDDHHmmSS(value string) DateTime {
// t, err := time.Parse(Layout_YYYYMMDDHHmmSS, value)
// if err != nil {
// return DateTime{}
// }
// return DateTime(t)
//}
//
//func ParseTime(layout, value string) (DateTime, error) {
// t, err := time.Parse(layout, value)
// if err != nil {
// return DateTime{}, err
// }
// return DateTime(t), nil
//}
//
//func IsSameDay(t1, t2 DateTime) bool {
// t1Local := t1.Local()
// t2Local := t2.Local()
// return t1Local.Year() == t2Local.Year() &&
// t1Local.Month() == t2Local.Month() &&
// t1Local.Day() == t2Local.Day()
//}
//
//// 是否同一周
//func IsSameWeek(t0, t1 DateTime) bool {
// y1, w1 := t0.Time().Local().ISOWeek()
// y2, w2 := t1.Time().Local().ISOWeek()
// return y1 == y2 && w1 == w2
//}
//func NotSameWeek(t0, t1 DateTime) bool {
// return !IsSameWeek(t0, t1)
//}
//
//// 是否同一个月
//func IsSameMonth(t0, t1 DateTime) bool {
// return t0.Month() == t1.Month()
//}
//func NotSameMonth(t0, t1 DateTime) bool {
// return !IsSameMonth(t0, t1)
//}
//
//// 是否同一季度
//func IsSameQuarter(t0, t1 DateTime) bool {
// return t0.Quarter() == t1.Quarter()
//}
//func NotSameSeason(t0, t1 DateTime) bool {
// return !IsSameQuarter(t0, t1)
//}
//
//// 是否同一年
//func IsSameYear(t0, t1 DateTime) bool {
// return t0.Time().Year() == t1.Time().Year()
//}
//func NotSameYear(t0, t1 DateTime) bool {
// return !IsSameYear(t0, t1)
//}
//
//func DayBeforeYesterday() DateTime {
// return DateTime(time.Now().AddDate(0, 0, -2))
//}
//
//func Yesterday() DateTime {
// return DateTime(time.Now().AddDate(0, 0, -1))
//}
//
//func Today() DateTime {
// return DateTime(time.Now())
//}
//
//func (t0 DateTime) PreviousQuarter(n int) DateTime {
// month := t0.Month()
// quarterStartMonth := time.Month((int(month)-1)/3*3 + 1)
// currentQuarterStart := time.Date(
// t0.Year(), quarterStartMonth, 1,
// 0, 0, 0, 0, t0.Time().Location(),
// )
// return DateTime(currentQuarterStart.AddDate(0, -3*n, 0))
//}
//
//func (t0 DateTime) FormatYYYYQT() string {
// month := t0.Month()
// quarter := (int(month)-1)/3 + 1
// return fmt.Sprintf("%s_%d", t0.Format(Layout_YYYY), quarter)
//}
//
//func DaysBetween(t0, t1 DateTime) int {
// t2 := time.Date(t0.Year(), t0.Time().Month(), t0.Day(), 0, 0, 0, 0, t0.Time().Location())
// t3 := time.Date(t1.Year(), t1.Time().Month(), t1.Day(), 0, 0, 0, 0, t1.Time().Location())
// diff := t2.Sub(t3)
// days := int(diff.Hours() / 24)
// return days
//}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论