• Golang时间


    当前时间

    golang 的时间是 time.Time

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
     //当前时间 golang的时间是 time.Time
     fmt.Println(time.Now()) //2022-11-03 19:52:12.457665 +0800 CST m=+0.000146886
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    时间格式化

    Time.Format(layout string) 进行格式化 layout:格式 2006:年 01:月 02:日 15:时 04:分 05:秒

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
     now := time.Now()
    
     //Time.Format(layout string) layout:格式 2006:年 01:月 02:日 15:时 04:分 05:秒
     fmt.Println(now.Format("2006-01-02 15:04:05")) //2022-11-04 10:33:40
     fmt.Println(now.Format("2006-01-02")) //2022-11-04
     fmt.Println(now.Format("15:04:05")) //10:33:40
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    字符串转时间

    1.time.Parse(layout, value string) (Time, error) 将字符串时间转换成time.Time,其中layout是时间格式,value是字符串时间,要求value格式匹配layout,使用默认UTC时区

    2.time.ParseInLocation 和 time.Parse 基本一致,只不过提供设置时区(第三参数)
    time.Local 根据本地系统区获取对应的时区
    time.LoadLocation(name string) (*Location, error) 根据name查找对应的时区

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	format := "2006-01-02 15:04:05"
    	value := "2022-02-02 22:22:22"
    
    	// time.Parse(layout, value string) (Time, error) 将字符串时间转换成time.Time,其中layout是时间格式,value是字符串时间,要求value格式匹配layout,使用默认UTC时区
    	parse, err := time.Parse("2006-01-02 15:04:05", value)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(parse) //2022-02-02 22:22:22 +0000 UTC
    	parseAndPrintTime(format,value,"") // 2022-02-02 22:22:22 +0800 CST
    	parseAndPrintTime(format,value,"Japan") // 2022-02-02 22:22:22 +0900 JST
    }
    
    func parseAndPrintTime(layout, value, location string) {
    	//time.ParseInLocation 和 time.Parse 基本一致,只不过提供设置时区(第三参数)
    	//time.Local 根据本地系统区获取对应的时区
    	//time.LoadLocation(name string) (*Location, error) 根据name查找对应的时区
    	var loadLocation *time.Location
    	if location == "" {
    		loadLocation = time.Local
    	}else {
    		l, err := time.LoadLocation(location)
    		if err != nil {
    			panic(err)
    		}
    		loadLocation = l
    	}
    
    	t, err := time.ParseInLocation(layout, value, loadLocation) //time.Local:根据系统找到对应时区
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(t)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    时间转时间戳

    使用Time.Unix()将时间转换成unix时间戳,注意时间戳是UTC标准下的时间戳

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	format := "2006-01-02 15:04:05"
    	value := "2022-02-02 22:22:22"
    	parse, err := time.Parse(format, value)
    	if err != nil {
    		panic(err)
    	}
    
    	parse2 := parseAndTime(format,value,"PRC")
    	fmt.Println(parse) //2022-02-02 22:22:22 +0000 UTC
    	fmt.Println(parse2) //2022-02-02 22:22:22 +0800 CST
    
    	//使用Time.Unix()将时间转换成unix时间戳,注意时间戳是UTC标准下的时间戳
    	fmt.Println(parse.Unix()) // 1643840542
    	fmt.Println(parse2.Unix()) // 1643811742
    }
    
    func parseAndTime(layout, value, location string) time.Time{
    	//time.ParseInLocation 和 time.Parse 基本一致,只不过提供设置时区(第三参数)
    	//time.Local 根据本地系统区获取对应的时区
    	//time.LoadLocation(name string) (*Location, error) 根据name查找对应的时区
    	var loadLocation *time.Location
    	if location == "" {
    		loadLocation = time.Local
    	}else {
    		l, err := time.LoadLocation(location)
    		if err != nil {
    			panic(err)
    		}
    		loadLocation = l
    	}
    
    	t, err := time.ParseInLocation(layout, value, loadLocation) //time.Local:根据系统找到对应时区
    	if err != nil {
    		panic(err)
    	}
    	return t
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    字符串转时间戳

    1.字符串先转时间,时间再转时间戳

    2.Time.Format是转换成当地时区的时间,所以要注意时间的时区,可能出现显示的时间和预期的不一样的结果

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	format := "2006-01-02 15:04:05"
    	value := "2022-02-02 22:22:22"
    	parse, err := time.Parse(format, value)
    	if err != nil {
    		panic(err)
    	}
    
    	parse2 := parseAndTime(format,value,"PRC")
    	fmt.Println(parse) //2022-02-02 22:22:22 +0000 UTC
    	fmt.Println(parse2) //2022-02-02 22:22:22 +0800 CST
    
    	//使用Time.Unix()将时间转换成unix时间戳,注意时间戳是UTC标准下的时间戳
    	fmt.Println(parse.Unix()) // 1643840542
    	fmt.Println(parse2.Unix()) // 1643811742
    
    	unix := time.Unix(parse.Unix(), 0)
    	unix2 := time.Unix(parse2.Unix(), 0)
    
    	//Time.Format是转换成当地时区的时间,所以要注意时间的时区,可能出现显示的时间和预期的不一样的结果
    	fmt.Println(unix.Format(format)) //2022-02-03 06:22:22 (PRC比UTC早8个小时)
    	fmt.Println(unix2.Format(format))  //2022-02-02 22:22:22
    }
    
    func parseAndTime(layout, value, location string) time.Time{
    	//time.ParseInLocation 和 time.Parse 基本一致,只不过提供设置时区(第三参数)
    	//time.Local 根据本地系统区获取对应的时区
    	//time.LoadLocation(name string) (*Location, error) 根据name查找对应的时区
    	var loadLocation *time.Location
    	if location == "" {
    		loadLocation = time.Local
    	}else {
    		l, err := time.LoadLocation(location)
    		if err != nil {
    			panic(err)
    		}
    		loadLocation = l
    	}
    
    	t, err := time.ParseInLocation(layout, value, loadLocation) //time.Local:根据系统找到对应时区
    	if err != nil {
    		panic(err)
    	}
    	return t
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    时间向前或向后

    时间的前进和后退可以使用t.Add(time.Duration),正的往后推,负的往前推

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	format := "2006-01-02 15:04:05"
    	value := "2022-02-02 22:22:22"
    	t := parseAndTime(format,value,"PRC")
    
    	//时间的前进和后退可以使用t.Add(time.Duration),正的往后推,负的往前推
    	t2 := t.Add(time.Hour * 12)
    	t3 := t.Add(time.Hour * -12)
    	fmt.Println(t2) // 2022-02-03 10:22:22 +0800 CST
    	fmt.Println(t3) // 2022-02-02 10:22:22 +0800 CST
    }
    
    func parseAndTime(layout, value, location string) time.Time{
    	//time.ParseInLocation 和 time.Parse 基本一致,只不过提供设置时区(第三参数)
    	//time.Local 根据本地系统区获取对应的时区
    	//time.LoadLocation(name string) (*Location, error) 根据name查找对应的时区
    	var loadLocation *time.Location
    	if location == "" {
    		loadLocation = time.Local
    	}else {
    		l, err := time.LoadLocation(location)
    		if err != nil {
    			panic(err)
    		}
    		loadLocation = l
    	}
    
    	t, err := time.ParseInLocation(layout, value, loadLocation) //time.Local:根据系统找到对应时区
    	if err != nil {
    		panic(err)
    	}
    	return t
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    获取两个时间的间隔(持续时间)

    time.Sub(time2) 获取time - time2的间隔(持续时间:time.Duration)

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	format := "2006-01-02 15:04:05"
    	value1 := "2022-02-02 22:22:22"
    	value2 := "2022-02-02 12:10:10"
    	t1 := parseAndTime(format,value1,"PRC")
    	t2 := parseAndTime(format,value2,"PRC")
    	//time.Sub(time2) 获取time - time2的间隔(持续时间:time.Duration)
    	fmt.Println(t1.Sub(t2)) //10h12m12s
    }
    
    func parseAndTime(layout, value, location string) time.Time{
    	//time.ParseInLocation 和 time.Parse 基本一致,只不过提供设置时区(第三参数)
    	//time.Local 根据本地系统区获取对应的时区
    	//time.LoadLocation(name string) (*Location, error) 根据name查找对应的时区
    	var loadLocation *time.Location
    	if location == "" {
    		loadLocation = time.Local
    	}else {
    		l, err := time.LoadLocation(location)
    		if err != nil {
    			panic(err)
    		}
    		loadLocation = l
    	}
    
    	t, err := time.ParseInLocation(layout, value, loadLocation) //time.Local:根据系统找到对应时区
    	if err != nil {
    		panic(err)
    	}
    	return t
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    time.Duration

    1.可以理解为时间中比较常用的“单位”,常用的有:时(1h0m0s),分(1m0s),秒(1s)
    2.如果需要一些特别的持续时间,可以通过 time.ParseDuration(s string) (Duration, error) 将时间解析为time.Duration

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	//可以理解为时间中比较常用的“单位”,常用的有:时(h),分(m),秒(s)
    	fmt.Println(time.Second) //1s
    	fmt.Println(time.Hour) //1h0m0s
    	fmt.Println(time.Minute) //1m0s
    
    	//如果需要一些特别的持续时间,可以通过 time.ParseDuration(s string) (Duration, error) 将时间解析为time.Duration
    	duration, err := time.ParseDuration("5h20m")
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(duration) //5h20m0s
    }
    
    func parseAndTime(layout, value, location string) time.Time{
    	//time.ParseInLocation 和 time.Parse 基本一致,只不过提供设置时区(第三参数)
    	//time.Local 根据本地系统区获取对应的时区
    	//time.LoadLocation(name string) (*Location, error) 根据name查找对应的时区
    	var loadLocation *time.Location
    	if location == "" {
    		loadLocation = time.Local
    	}else {
    		l, err := time.LoadLocation(location)
    		if err != nil {
    			panic(err)
    		}
    		loadLocation = l
    	}
    
    	t, err := time.ParseInLocation(layout, value, loadLocation) //time.Local:根据系统找到对应时区
    	if err != nil {
    		panic(err)
    	}
    	return t
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    React动态添加标签组件
    python中json的使用dump,dumps,loads,load简单了解
    [SpringCloud] Eureka 与 Ribbon 简介
    VSCODE自定义代码片段简述与基础使用
    前端 vue生命周期
    Vue 使用vue-cli构建SPA项目(超详细)
    【Python游戏】Python版本的雷霆战机游戏,最新最简单版本来了
    MAIR_ELX总结
    Abp 调用仓储时报错:无法访问已处理的上下文实例
    K8S-存储卷,pv,pvc
  • 原文地址:https://blog.csdn.net/qq_29744347/article/details/127710886