Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xpkg
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
屠思豪
xpkg
Commits
d7d3be58
提交
d7d3be58
authored
8月 27, 2025
作者:
mooncake9527
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update xtime
上级
4095a391
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
396 行增加
和
27 行删除
+396
-27
xtime.go
utils/xtime/xtime.go
+2
-27
xtime.tmp.go
utils/xtime/xtime.tmp.go
+394
-0
xtime.tmp_test.go
utils/xtime/xtime.tmp_test.go
+0
-0
没有找到文件。
utils/xtime/xtime.go
浏览文件 @
d7d3be58
...
@@ -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
}
}
...
...
utils/xtime/xtime.tmp.go
0 → 100644
浏览文件 @
d7d3be58
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
//}
utils/xtime/xtime_test.go
→
utils/xtime/xtime
.tmp
_test.go
浏览文件 @
d7d3be58
File moved
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论