Go语言学习之time包 获取当前时间戳等 the way to go

本文详细介绍Go语言中的时间处理方法,包括获取当前时间、时间格式化、时间戳转换及时间比较等核心功能,通过实例演示如何使用Go的时间包进行高效的时间操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                       

生命不止,继续 go go go !!!

每种语言都需要对时间进行处理,golang当然也不例外,go语言为我们提供了time package用于各种时间的转换,处理。

Package time provides functionality for measuring and displaying time.

获取当前时间

func Now

func Now() Time
  
  • 1

Now returns the current local time.

func (Time) UTC

func (t Time) UTC() Time
  
  • 1

UTC returns t with the location set to UTC.

func (Time) Unix

func (t Time) Unix() int64
  
  • 1

Unix returns t as a Unix time, the number of seconds elapsed since January 1, 1970 UTC.

func (Time) UnixNano

func (t Time) UnixNano() int64
  
  • 1

UnixNano returns t as a Unix time, the number of nanoseconds elapsed since January 1, 1970 UTC.

看到Unix和UnixNano的区别了吧,就是精度不同而已:

package mainimport (    "fmt"    "strconv"    "time")func main() {    t := time.Now()    fmt.Println(t)    fmt.Println(t.UTC().Format(time.UnixDate))    fmt.Println(t.Unix())    timestamp := strconv.FormatInt(t.UTC().UnixNano(), 10)    fmt.Println(timestamp)    timestamp = timestamp[:10]    fmt.Println(timestamp)}
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

输出:
2017-06-21 11:52:29.0826692 +0800 CST
Wed Jun 21 03:52:29 UTC 2017
1498017149
1498017149082669200
1498017149

时间格式化字符串转换

func Parse

package mainimport (    "fmt"    "strconv"    "time")func main() {    const longForm = "Jan 2, 2006 at 3:04pm (MST)"    t, _ := time.Parse(longForm, "Jun 21, 2017 at 0:00am (PST)")    fmt.Println(t)    const shortForm = "2006-Jan-02"    t, _ = time.Parse(shortForm, "2017-Jun-21")    fmt.Println(t)    t, _ = time.Parse("01/02/2006", "06/21/2017")    fmt.Println(t)    fmt.Println(t.Unix())    i, err := strconv.ParseInt("1498003200", 10, 64)    if err != nil {        panic(err)    }    tm := time.Unix(i, 0)    fmt.Println(tm)    var timestamp int64 = 1498003200    tm2 := time.Unix(timestamp, 0)    fmt.Println(tm2.Format("2006-01-02 03:04:05 PM"))    fmt.Println(tm2.Format("02/01/2006 15:04:05 PM"))}
  
  • 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

输出:
2017-06-21 00:00:00 +0000 PST
2017-06-21 00:00:00 +0000 UTC
2017-06-21 00:00:00 +0000 UTC
1498003200
2017-06-21 08:00:00 +0800 CST
2017-06-21 08:00:00 AM
21/06/2017 08:00:00 AM

再看一个例子:

package mainimport (    "fmt"    "strings"    "time")func main() {    var dates [4]time.Time    dates[0], _ = time.Parse("2006-01-02 15:04:05.000000000 MST -07:00", "1609-09-12 19:02:35.123456789 PDT +03:00")    dates[1], _ = time.Parse("2006-01-02 03:04:05 PM -0700", "1995-11-07 04:29:43 AM -0209")    dates[2], _ = time.Parse("PM -0700 01/02/2006 03:04:05", "AM -0209 11/07/1995 04:29:43")    dates[3], _ = time.Parse("Time:Z07:00T15:04:05 Date:2006-01-02 ", "Time:-03:30T19:18:35 Date:2119-10-29")    defaultFormat := "2006-01-02 15:04:05 PM -07:00 Jan Mon MST"    formats := []map[string]string{        {"format": "2006", "description": "Year"},        {"format": "06", "description": "Year"},        {"format": "01", "description": "Month"},        {"format": "1", "description": "Month"},        {"format": "Jan", "description": "Month"},        {"format": "January", "description": "Month"},        {"format": "02", "description": "Day"},        {"format": "2", "description": "Day"},        {"format": "Mon", "description": "Week day"},        {"format": "Monday", "description": "Week day"},        {"format": "03", "description": "Hours"},        {"format": "3", "description": "Hours"},        {"format": "15", "description": "Hours"},        {"format": "04", "description": "Minutes"},        {"format": "4", "description": "Minutes"},        {"format": "05", "description": "Seconds"},        {"format": "5", "description": "Seconds"},        {"format": "PM", "description": "AM or PM"},        {"format": ".000", "description": "Miliseconds"},        {"format": ".000000", "description": "Microseconds"},        {"format": ".000000000", "description": "Nanoseconds"},        {"format": "-0700", "description": "Timezone offset"},        {"format": "-07:00", "description": "Timezone offset"},        {"format": "Z0700", "description": "Timezone offset"},        {"format": "Z07:00", "description": "Timezone offset"},        {"format": "MST", "description": "Timezone"}}    for _, date := range dates {        fmt.Printf("\n\n %s \n", date.Format(defaultFormat))        fmt.Printf("%-15s + %-12s + %12s \n", strings.Repeat("-", 15), strings.Repeat("-", 12), strings.Repeat("-", 12))        fmt.Printf("%-15s | %-12s | %12s \n", "Type", "Placeholder", "Value")        fmt.Printf("%-15s + %-12s + %12s \n", strings.Repeat("-", 15), strings.Repeat("-", 12), strings.Repeat("-", 12))        for _, f := range formats {            fmt.Printf("%-15s | %-12s | %-12s \n", f["description"], f["format"], date.Format(f["format"]))        }        fmt.Printf("%-15s + %-12s + %12s \n", strings.Repeat("-", 15), strings.Repeat("-", 12), strings.Repeat("-", 12))    }}
  
  • 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
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

time包的一些其他用法

time包很强大,这里不能整个篇幅的进行介绍,可以自己去看官方的文档。

func Date

func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
  
  • 1

time常用方法

After(u Time) bool
时间类型比较,是否在Time之后

Before(u Time) bool
时间类型比较,是否在Time之前

Equal(u Time) bool
比较两个时间是否相等

IsZero() bool
判断时间是否为零值,如果sec和nsec两个属性都是0的话,则该时间类型为0

Date() (year int, month Month, day int)
返回年月日,三个参数

Year() int
返回年份

Month() Month
返回月份.是Month类型

Day() int
返回多少号

Weekday() Weekday
返回星期几,是Weekday类型

ISOWeek() (year, week int)
返回年份,和该填是在这年的第几周.

Clock() (hour, min, sec int)
返回小时,分钟,秒

Hour() int
返回小时

Minute() int
返回分钟

Second() int
返回秒数

Nanosecond() int
返回纳秒

应用:

package mainimport "fmt"import "time"func main() {    p := fmt.Println    now := time.Now()    p(now)    then := time.Date(        2017, 06, 21, 20, 34, 58, 0, time.UTC)    p(then)    p(then.Year())    p(then.Month())    p(then.Day())    p(then.Hour())    p(then.Minute())    p(then.Second())    p(then.Nanosecond())    p(then.Location())    p(then.Weekday())    p(then.Before(now))    p(then.After(now))    p(then.Equal(now))    diff := now.Sub(then)    p(diff)    p(diff.Hours())    p(diff.Minutes())    p(diff.Seconds())    p(diff.Nanoseconds())    p(then.Add(diff))    p(then.Add(-diff))}
  
  • 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

输出:
2017-06-21 13:22:36.5138633 +0800 CST
2017-06-21 20:34:58 +0000 UTC
2017
June
21
20
34
58
0
UTC
Wednesday
false
true
false
-15h12m21.4861367s
-15.205968371305556
-912.3581022783334
-54741.4861367
-54741486136700
2017-06-21 05:22:36.5138633 +0000 UTC
2017-06-22 11:47:19.4861367 +0000 UTC

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值