美文网首页
GO time和字符串互转

GO time和字符串互转

作者: 舍是境界 | 来源:发表于2022-01-20 07:14 被阅读0次

工作中经常会遇到时间转字符串,或者根据字符串转日期的需求,这里做相关介绍说明。

先来看下GO time包下给我们提供的常用layout有哪些:

    ANSIC       = "Mon Jan _2 15:04:05 2006"
    UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
    RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
    RFC822      = "02 Jan 06 15:04 MST"
    RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
    RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
    RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
    RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
    RFC3339     = "2006-01-02T15:04:05Z07:00"
    RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
    Kitchen     = "3:04PM"
    // Handy time stamps.
    Stamp      = "Jan _2 15:04:05"
    StampMilli = "Jan _2 15:04:05.000"
    StampMicro = "Jan _2 15:04:05.000000"
    StampNano  = "Jan _2 15:04:05.000000000"

注意这里的时间,其实可以记为:01/02 03:04:05PM '06 -0700,也就是一月二号下午3点4分5秒,06年,时区是-7

本质其实还是占位符,和%Y代表年,道理是一样的,不过在go里面我们必须采用此时间的占位符,下面我们看看具体的转换代码:

int64转日期

time.Unix(1641912386, 0),

注意这里的第一个参数为格林威治到现在的秒数,后面则为ms数

字符串转日期

func ParseTime(layout string, timeStr string) (time.Time, error){
    var cstZone = time.FixedZone("CST", 8*3600)
    return time.ParseInLocation(layout, timeStr, cstZone)
}

//相当于time.ParseInLocation(layout, timeStr, time.UTC)
func ParseTimeV2(layout string, timeStr string) (time.Time, error){
    return time.Parse(layout, timeStr)
}

日期转字符串

func FormatTime(layout string, t time.Time) string {
    return t.Format(layout)
}

使用示例:

func TestFormatTime(t *testing.T) {
    tests := []struct{
        name string
        layout string
        input time.Time
        expect string
    }{
        {
            name: "Tue Jan 11 2022 22:46:26 GMT+0800 (中国标准时间)",
            layout: "Mon, 02 Jan 2006 15:04:05 GMT+0800",
            input: time.Unix(1641912386, 0),
            expect: "Tue, 11 Jan 2022 22:46:26 GMT+0800",
        },
        {
            name: "Tue Jan 11 2022 22:46:26 GMT+0800 (中国标准时间)",
            layout: "Mon, 02 Jan 2006 15:04:05",
            input: time.Unix(1641912386, 0),
            expect: "Tue, 11 Jan 2022 22:46:26",
        },
        {
            name: "Tue Jan 11 2022 22:46:26 GMT+0800 (中国标准时间)",
            layout: "2006-01-02T15:04:05",
            input: time.Unix(1641912386, 0),
            expect: "2022-01-11T22:46:26",
        },
    }

    for _, tt := range tests {
        result := FormatTime(tt.layout, tt.input)
        assert.Equal(t, tt.expect, result)
    }
}

func TestParseTime(t *testing.T) {
    tests := []struct{
        name string
        layout string
        input string
        expect int64
    }{
        {
            name: "Tue Jan 11 2022 22:46:26 GMT+0800 (中国标准时间)",
            layout: "Mon, 02 Jan 2006 15:04:05 GMT+0800",
            input: "Tue, 11 Jan 2022 22:46:26 GMT+0800",
            expect: int64(1641912386),
        },
        {
            name: "Tue Jan 11 2022 22:46:26 GMT+0800 (中国标准时间)",
            layout: "Mon, 02 Jan 2006 15:04:05",
            input: "Tue, 11 Jan 2022 22:46:26",
            expect: int64(1641912386),
        },
        {
            name: "Tue Jan 11 2022 22:46:26 GMT+0800 (中国标准时间)",
            layout: "2006-01-02T15:04:05",
            input: "2022-01-11T22:46:26",
            expect: int64(1641912386),
        },
    }

    for _, tt := range tests {
        result, err := ParseTime(tt.layout, tt.input)
        if err != nil {
            t.Error(err)
        }
        assert.Equal(t, tt.expect, result.Unix())
    }
}

相关文章

  • GO time和字符串互转

    工作中经常会遇到时间转字符串,或者根据字符串转日期的需求,这里做相关介绍说明。 先来看下GO time包下给我们提...

  • Go语言基础之strconv标准库

    Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换。 strconv包 strconv包实现了基...

  • java字符串和十六进制字符串互转

    java字符串和十六进制字符串互转

  • python 时间模块

    python常用时间模块有time datetime记录下一些常用的方法,方便下次查找 字符串,时间格式相互转化...

  • ruby中Time/Date/DateTime小结

    Time,Date,DateTime的区别: 比如: 相互转化:Time.now.to_date.to_datet...

  • 时间转成毫秒数

    日期时间字符串和毫秒之间的相互转换

  • iOS 字典与字符串互相转换

    Swift: Swift3 JSON字符串和字典互转(JSON字符串转字典和字典转JSON字符串) http://...

  • Go 知识点

    Go 知识点 定义变量自动赋类型 字符串和数字相互转化 循环 函数 空白符 数组 [n]T 多维数组 切片 字典 ...

  • go 进制互转

    go 进制互转 十进制 <------> 十六进制

  • GO - 2(time)

    GO中的time格式化时,很变态使用的是一个准确的时间字符串,有人说这是Go产生的时间 2006-01-02 15...

网友评论

      本文标题:GO time和字符串互转

      本文链接:https://www.haomeiwen.com/subject/jagicrtx.html