Go语言time包的使用

时间类型

time.Time类型表示时间。

1、时间类型

1
2
3
4
5
6
7
8
9
10
11
12
13
func timeDemo()  {
    now := time.Now()
    fmt.Println(now)
    fmt.Println(now.Format("2006-01-02 15:04:05"))
    year := now.Year()
    month := now.Month()
    day := now.Day()
    hour := now.Hour()
    minute := now.Minute()
    second := now.Second()
    //输出格式可以自定义
    fmt.Printf("%d,%02d,%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}

输出结果:

1
2
3
2021-07-29 15:48:56.927489 +0800 CST m=+0.000069188
2021-07-29 15:48:56
2021,07,29 15:48:56

2、字符串类型转time

1
2
3
4
5
6
s4 := "1999年10月19日" //字符串
t4, err := time.Parse("2006年01月02日", s4)
if err != nil {
    fmt.Println("err", err)
}
fmt.Println(t4)

输出结果:   

1
1999-10-19 00:00:00 +0000 UTC 

3、时间戳

时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(UnixTimestamp)。

1
2
3
4
5
6
//时间戳
func timestampDemo()  {
    now := time.Now()
    timestamp := now.Unix()
    fmt.Println(timestamp) 
}

输出结果:

1
1627545363

time.Unix()函数将时间戳转为时间格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
func timestampDemo2(timestamp int64) {
    now := time.Now()
    timestamp := now.Unix()
    timeObj := time.Unix(timestamp, 0) //将时间戳转为时间格式
    fmt.Println(timeObj)    //2021-07-29 15:57:15 +0800 CST
    year := timeObj.Year()     //年
    month := timeObj.Month()   //月
    day := timeObj.Day()       //日
    hour := timeObj.Hour()     //小时
    minute := timeObj.Minute() //分钟
    second := timeObj.Second() //秒
    fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second) //2021-07-29 15:57:15
}

输出结果:

1
2
2021-07-29 15:57:15 +0800 CST
2021-07-29 15:57:15

4、时间间隔

Duration类型代表两个时间点之间经过的时间,以纳秒为单位。

1
2
3
4
5
6
7
8
const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

5、时间加时间间隔

语法:

1
func (t Time) Add(d Duration) Time

示例:计算1小时后及1小时前时间

1
2
3
4
5
6
7
func main() {
    now := time.Now()
    later := now.Add(time.Hour)
    fmt.Println(later)
    before := now.Add(-time.Hour)
    fmt.Println(before)
}

输出结果:

1
2
2021-07-29 17:01:50.239301 +0800 CST m=+3600.000080244
2021-07-29 15:01:50.239301 +0800 CST m=-3599.999919756

6、定时器

time.Tick(时间间隔)来设置定时器。

1
2
3
4
5
6
7
//定时器,每隔1s打印下i
func tickDemo() {
    ticker := time.Tick(time.Second)
    for i := range ticker{
        fmt.Println(i)
    }
}

输出结果:

1
2
3
4
2021-07-29 16:03:16.519927 +0800 CST m=+1.003226534
2021-07-29 16:03:17.516987 +0800 CST m=+2.000315947
2021-07-29 16:03:18.516788 +0800 CST m=+3.000145536
....

7、睡眠sleep

1
2
time.Sleep(3 *time.Second)
fmt.Println("睡眠3s")

睡眠[1-10随机数]

1
2
3
4
5
6
7
func main() {
    rand.Seed(time.Now().UnixNano())
    randNum := rand.Intn(10) + 1 //int类型,需要转换
    fmt.Println(randNum)
    time.Sleep(time.Duration(randNum) * time.Second)
    fmt.Printf("睡了%d秒\n", randNum)
}

输出结果:

1
2
6
睡了6秒

8、时间格式化

Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4 5)。

1
2
3
4
5
6
7
8
9
//时间格式化
func formatDemo() {
    now := time.Now()
    // 格式化的模板为Go的出生时间2006年1月2号15点04分
    fmt.Println(now.Format("2006-01-02 15:04:05"))  //2019-04-24 18:37:59
    fmt.Println(now.Format("2006/01/02 15:04"))
    fmt.Println(now.Format("15:04 2006/01/02"))
    fmt.Println(now.Format("2006/01/02"))
}

输出结果:

1
2
3
4
2021-07-29 16:12:52
2021/07/29 16:12
16:12 2021/07/29
2021/07/29  

9、时间比较

Equal

判断时间是否相等,会有时区影响。

1
func (t Time) Equal(u Time) bool

Before

1
func (t Time) Before(u Time) bool

如果t代表的时间点在u之前,返回真;否则返回假。

After

1
func (t Time) After(u Time) bool

如果t代表的时间点在u之后,返回真;否则返回假。

posted @   人艰不拆_zmc  阅读(169)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2016-07-29 ant简述
2016-07-29 Docker镜像的获取与删除
2016-07-29 ubuntu14.04安装Docker
2016-07-29 简述Docker镜像、容器、仓库概念
2014-07-29 POJ3414—Pots(bfs加回溯)
点击右上角即可分享
微信分享提示