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/zh-hant/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

發表回復

登錄後才能評論