Go时间包中的duration类型详解

一、duration的基本概念

duration是Go语言中表示时间段的类型,它是int64类型的别名。在Go语言中,时间处理是比较重要的,因为很多情况下我们都需要和时间打交道。duration类型可以表示一段时间,比如1小时30分钟,可以用time.Hour*1+time.Minute*30来表示。duration类型的单位是纳秒,可以使用time包中的常量来表示不同的时间段。

// 常用的时间段
const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

二、duration的使用方法

duration类型可以通过代表整数的字符串进行解析,例如”2h30m”的字符串表示2小时30分的时间段,可以使用ParseDuration方法将其解析成duration类型

package main

import (
	"fmt"
	"time"
)

func main() {
	duration, err := time.ParseDuration("2h30m")
	fmt.Println(duration, err)
}

输出:

2h30m0s <nil>

duration类型可以进行加减操作,在时间处理中非常常见,例如我们可以用Add或者Sub方法对时间进行操作:

package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now()
	expiration := now.Add(time.Hour * 24)
	fmt.Println(expiration.Sub(now))
}

输出:

24h0m0s

三、duration的单位转换

duration类型可以转换为其他时间单位,例如分钟、小时等。可以使用duration类型的Seconds方法获得秒数,然后再根据自己的需要转换为其他时间单位。例如:

package main

import (
	"fmt"
	"time"
)

func main() {
	duration := time.Hour + time.Minute*30
	fmt.Println(int(duration.Seconds() / 60)) // 转换为分钟
	fmt.Println(duration.Hours())             // 转换为小时
}

输出:

90
1.5

四、duration与ticker定时器的使用

duration类型可以与ticker定时器一起使用,可以在指定的时间内执行某些操作,例如定时执行某个任务。例如:

package main

import (
	"fmt"
	"time"
)

func main() {
	ticker := time.NewTicker(2 * time.Second)
	go func() {
		for t := range ticker.C{
			fmt.Println("Tick at ", t)
		}
	}()

	time.Sleep(10 * time.Second)
	ticker.Stop()
	fmt.Println("Ticker stopped")
}

输出:

Tick at  2021-06-17 21:58:51.9558865 +0800 CST m=+2.002681801
Tick at  2021-06-17 21:58:53.9559934 +0800 CST m=+4.002748701
Tick at  2021-06-17 21:58:55.9561261 +0800 CST m=+6.002861401
Tick at  2021-06-17 21:58:57.9562236 +0800 CST m=+8.003938001
Tick at  2021-06-17 21:58:59.9563296 +0800 CST m=+10.004023801
Ticker stopped

五、duration与sleep的使用

duration类型可以与sleep一起使用,可以让程序在指定的时间内睡眠。sleep的时间应该使用duration类型表示。

package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("Sleep 5 seconds")
	time.Sleep(5 * time.Second)
	fmt.Println("Wake up")
}

输出:

Sleep 5 seconds
Wake up

六、duration的注意事项

在使用duration类型时需要注意以下几点:

  1. duration类型只能有一个正负号,即不能存在两个连续的负号。
  2. duration类型的最大取值不能超过1<<63-1,如果超过会产生溢出。
  3. duration类型的精度不能保证完全正确,因此在计算时间时可能会有误差。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/256797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:42
下一篇 2024-12-15 12:42

相关推荐

  • int类型变量的细节与注意事项

    本文将从 int 类型变量的定义、声明、初始化、范围、运算和类型转换等方面,对 int 类型变量进行详细阐述和讲解,帮助读者更好地掌握和应用 int 变量。 一、定义与声明 int…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python基本数字类型

    本文将介绍Python中基本数字类型,包括整型、布尔型、浮点型、复数型,并提供相应的代码示例以便读者更好的理解。 一、整型 整型即整数类型,Python中的整型没有大小限制,所以可…

    编程 2025-04-29
  • Python中的Bool类型判断

    本篇文章旨在讲解Python中的Bool类型判断。在Python中,Bool类型是经常使用的一种类型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    编程 2025-04-29
  • 解决docker-compose 容器时间和服务器时间不同步问题

    docker-compose是一种工具,能够让您使用YAML文件来定义和运行多个容器。然而,有时候容器的时间与服务器时间不同步,导致一些不必要的错误和麻烦。以下是解决方法的详细介绍…

    编程 2025-04-29
  • Python函数类型有哪些

    本文将从以下几个方面详细阐述Python函数类型。 一、内置函数 Python的内置函数是指在Python编程语言中提供的可以直接使用的函数,不需要通过导入模块等方式引入。 部分常…

    编程 2025-04-29
  • Python变量类型用法介绍

    Python是一种解释型编程语言,它提供了丰富的数据类型,包括数字、字符串、列表、元组、集合、字典等。Python变量类型的定义是Python程序开发的基础,本文将从以下几个方面对…

    编程 2025-04-28
  • Python中的整数类型int类总览

    本文将从多个方面,对Python中的整数类型int类进行全面介绍和阐述。 一、数据类型及基本操作 在Python中,整数类型的数据类型为int。在Python3.x中,整数类型的范…

    编程 2025-04-28
  • 想把你和时间藏起来

    如果你觉得时间过得太快,每天都过得太匆忙,那么你是否曾经想过想把时间藏起来,慢慢享受每一个瞬间?在这篇文章中,我们将会从多个方面,详细地阐述如何想把你和时间藏起来。 一、一些时间管…

    编程 2025-04-28
  • 计算斐波那契数列的时间复杂度解析

    斐波那契数列是一个数列,其中每个数都是前两个数的和,第一个数和第二个数都是1。斐波那契数列的前几项为:1,1,2,3,5,8,13,21,34,…。计算斐波那契数列常用…

    编程 2025-04-28

发表回复

登录后才能评论