Go 自定义14位时间类型 yyyyMMddHHmmss

目录

功能

代码


功能

数据库或者接口时间类型,经常会使用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时间的编码与解码。

相关推荐

  1. go定义error

    2024-04-13 18:26:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-13 18:26:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-13 18:26:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-13 18:26:03       87 阅读
  4. Python语言-面向对象

    2024-04-13 18:26:03       96 阅读

热门阅读

  1. 数据仓库—大数据建模

    2024-04-13 18:26:03       37 阅读
  2. 计算器1.0版

    2024-04-13 18:26:03       35 阅读
  3. Elasticsearch的倒排索引是什么?

    2024-04-13 18:26:03       31 阅读
  4. 思维题,LeetCode 2923. 找到冠军 I

    2024-04-13 18:26:03       42 阅读
  5. (32)4.12 作业题

    2024-04-13 18:26:03       39 阅读
  6. 猴子选大王(循环单链表)

    2024-04-13 18:26:03       37 阅读
  7. vue this.$set()、this.$delete使用方法

    2024-04-13 18:26:03       40 阅读