关于 Golang 的时间、时区和时间戳

 

2020-08-01

抽空把 time 标准包的部分常用基本功能捋了一遍。

时间

获取时间

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
// 获取本地计算机时间
8
localTime := time.Now()
9
// 2020-08-01 22:08:12.983185 +0800 CST m=+0.000104694
10
fmt.Println(localTime)
11
}

时间格式化

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
localTime := time.Now()
8
// 2006-01-02 15:04:05 中的时间不可更改
9
formatTime := localTime.Format("2006-01-02 15:04:05")
10
fmt.Println(formatTime) // 返回:2020-08-01 22:16:03
11
}

上面是用-做为分隔符,也可以自定义:

1
func main() {
2
localTime := time.Now()
3
// 日、月、小时和分秒,如果可去掉 前导的 0
4
formatTime := localTime.Format("2006年1月2日 15点04分05秒")
5
fmt.Println(formatTime) // 返回:2020年8月1日 22点58分07秒
6
}

只获取指定部分:

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
localTime := time.Now()
8
9
// 分别返回年月日
10
fmt.Println(localTime.Year())
11
fmt.Println(localTime.Month())
12
fmt.Println(localTime.Day())
13
// 返回时分秒
14
fmt.Println(localTime.Hour())
15
fmt.Println(localTime.Minute())
16
fmt.Println(localTime.Second())
17
// 返回周
18
fmt.Println(localTime.Weekday())
19
}

时区

查看时区

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
localTime := time.Now()
8
// 返回 CST 28800(时区及 UTC 偏移量)
9
fmt.Println(localTime.Zone())
10
// 需要 tzdata 支持
11
time.LoadLocation("Local")
12
}

指定时区

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
localTime := time.Now()
8
// 8*60*60 也可用 int((8 * time.Hour).Seconds()) 表示
9
cusZone := time.FixedZone("UTC+8", 8*60*60)
10
cusTime := localTime.In(cusZone)
11
fmt.Println(cusTime)
12
}

时间戳

查看时间戳

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
currTime := time.Now()
8
// 秒
9
unixTime := currTime.Unix()
10
// 纳秒
11
unixNanoTime := currTime.UnixNano()
12
}

上面的示例其实是把当前的时间转为时间戳,也可以把指定的时间转为时间戳:

1
func main() {
2
cusZone := time.FixedZone("UTC+8", 8*60*60)
3
// 2020-12-11 10:09:08.000000007 +0800 UTC+8
4
timeDate := time.Date(2020, 12, 11, 10, 9, 8, 7, cusZone)
5
unixTime := timeDate.Unix() // 返回 1607652548
6
}

时间戳转时间字符串

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
currUnixTime := Time.Now().Unix()
8
currTime := Time.Unix(currUnixTime, 0)
9
// 2020-08-01 00:11:22 +0800 CST
10
fmt.Println(currTime)
11
}

时间运算

1
import (
2
"fmt"
3
"time"
4
)
5
6
func main() {
7
currTime := time.Now()
8
// 时间相加,可改用负数做减法
9
fmt.Println(currTime.Add(time.Second * 10)) // 加 10秒
10
fmt.Println(currTime.Add(time.Minute * 10)) // 10分钟
11
fmt.Println(currTime.Add(time.Hour * 10)) // 10小时
12
fmt.Println(currTime.Add(time.Hour * 24 * 10)) // 10天
13
14
// 日期相加
15
fmt.Println(currTime.AddDate(1, 2, 3))
16
17
// 时间相减,结果以小时计
18
subTime := currTime.Add(time.Hour * 10).Sub(currTime)
19
fmt.Println(subTime) // 返回 10h0m0s
20
}

参考