提交 ff2ee12c authored 作者: mooncake's avatar mooncake

update

上级 560e08e0
......@@ -278,3 +278,41 @@ func (d Date) IsWeekend() bool {
func (d Date) DaysSince() int {
return Today().DaysBetween(d)
}
// MarshalCSV 实现CSV序列化方法
func (d Date) MarshalCSV() (string, error) {
t := time.Time(d)
if t.IsZero() {
return "", nil
}
return t.Format("2006-01-02"), nil
}
// UnmarshalCSV 实现CSV反序列化方法
func (d *Date) UnmarshalCSV(csv string) error {
if csv == "" {
*d = Date(time.Time{})
return nil
}
// 支持多种日期格式
formats := []string{
"2006-01-02",
"2006/01/02",
"02/01/2006",
"2006-1-2",
}
var t time.Time
var err error
for _, format := range formats {
t, err = time.Parse(format, csv)
if err == nil {
*d = Date(t)
return nil
}
}
return fmt.Errorf("无法解析日期格式: %s", csv)
}
......@@ -558,3 +558,41 @@ func (dt DateTime) Day() int {
// time.April (4月), time.May (5月), time.June (6月)
// time.July (7月), time.August (8月), time.September (9月)
// time.October (10月), time.November (11月), time.December (12月)
// MarshalCSV 实现CSV序列化方法
func (d DateTime) MarshalCSV() (string, error) {
t := time.Time(d)
if t.IsZero() {
return "", nil
}
return t.Format("2006-01-02 15:04:05"), nil
}
// UnmarshalCSV 实现CSV反序列化方法
func (d *DateTime) UnmarshalCSV(csv string) error {
if csv == "" {
*d = DateTime(time.Time{})
return nil
}
// 支持多种时间格式
formats := []string{
"2006-01-02 15:04:05",
"2006-01-02",
time.RFC3339,
time.RFC3339Nano,
}
var t time.Time
var err error
for _, format := range formats {
t, err = time.Parse(format, csv)
if err == nil {
*d = DateTime(t)
return nil
}
}
return fmt.Errorf("无法解析时间格式: %s", csv)
}
......@@ -263,3 +263,45 @@ func NowTime() Time {
now := time.Now()
return Time(time.Date(0, 1, 1, now.Hour(), now.Minute(), now.Second(), 0, now.Location()))
}
// MarshalCSV 实现CSV序列化方法
func (t Time) MarshalCSV() (string, error) {
tm := time.Time(t)
if tm.IsZero() {
return "", nil
}
return tm.Format("15:04:05"), nil
}
// UnmarshalCSV 实现CSV反序列化方法
func (t *Time) UnmarshalCSV(csv string) error {
if csv == "" {
*t = Time(time.Time{})
return nil
}
// 支持多种时间格式
formats := []string{
"15:04:05",
"15:04",
"3:04:05 PM",
"15:04:05.000",
}
var tm time.Time
var err error
for _, format := range formats {
tm, err = time.Parse(format, csv)
if err == nil {
// 使用固定的日期部分(如今天)但只保留时间
now := time.Now()
combined := time.Date(now.Year(), now.Month(), now.Day(),
tm.Hour(), tm.Minute(), tm.Second(), 0, time.Local)
*t = Time(combined)
return nil
}
}
return fmt.Errorf("无法解析时间格式: %s", csv)
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论