0
点赞
收藏
分享

微信扫一扫

数学基础:矩阵

天蓝Sea 04-13 21:00 阅读 0

目录

功能

代码


功能

数据库或者接口时间类型,经常会使用14位的时间格式。每次都转换有点麻烦。可以自定义一个时间类型。

自定义类型需要实现json接口中的MarshalJSON与UnmarshalJSON两个函数,这样在做json编码解码时就会自动转为14位的时间格式了。

代码

package htime

import (
	"errors"
	"fmt"
	"strings"
	"time"
)

const (
	LayoutT14 = "20060102150405"
)

type T14 time.Time

func (nt T14) String() string {
	return time.Time(nt).Local().Format(LayoutT14)
}

// MarshalJSON	JSON编码
func (nt T14) MarshalJSON() ([]byte, error) {
	t := time.Time(nt).Local()

	if y := t.Year(); y < 0 || y >= 10000 {
		return nil, errors.New("Time.MarshalJSON: year outside of range [0,9999]")
	}

	b := make([]byte, 0, len(LayoutT14)+2)
	b = append(b, '"')
	if !t.IsZero() {
		b = t.AppendFormat(b, LayoutT14)
	}
	b = append(b, '"')
	return b, nil
}

// UnmarshalJSON JSON解码
func (nt *T14) UnmarshalJSON(data []byte) error {
	v := strings.Trim(string(data), "\"")
	if data == nil || v == "" {
		*nt = T14(time.Time{})
		return nil
	}
	t, err := time.ParseInLocation(LayoutT14, v, time.Local)
	if err != nil {
		return fmt.Errorf("解析时间字符串'%s'出错", v)
	}
	*nt = T14(t.Local())
	return err
}

// NowF14 取当前格式化时间
func NowF14() string {
	return T14(time.Now()).String()
}

// ParseT14 解析时间
func ParseT14(t14 string) time.Time {
	t14Time, err := time.ParseInLocation(LayoutT14, t14, time.Local)
	if err != nil {
		return time.Time{}
	}
	return t14Time
}

以上代码实现了14位yyyyMMddHHmmss时间的编码与解码。

举报

相关推荐

0 条评论