GO語言————4.8 時間和日期

FLy_鵬程萬里發表於2018-06-29

4.8 時間和日期

time 包為我們提供了一個資料型別 time.Time(作為值使用)以及顯示和測量時間和日期的功能函式。

當前時間可以使用 time.Now() 獲取,或者使用 t.Day()t.Minute() 等等來獲取時間的一部分;你甚至可以自定義時間格式化字串,例如: fmt.Printf("%02d.%02d.%4d\n", t.Day(), t.Month(), t.Year()) 將會輸出 21.07.2011

Duration 型別表示兩個連續時刻所相差的納秒數,型別為 int64。Location 型別對映某個時區的時間,UTC 表示通用協調世界時間。

包中的一個預定義函式 func (t Time) Format(layout string) string 可以根據一個格式化字串來將一個時間 t 轉換為相應格式的字串,你可以使用一些預定義的格式,如:time.ANSIC 或 time.RFC822

一般的格式化設計是通過對於一個標準時間的格式化描述來展現的,這聽起來很奇怪,但看下面這個例子你就會一目瞭然:

fmt.Println(t.Format("02 Jan 2006 15:04")) 

輸出:

21 Jul 2011 10:31

其它有關時間操作的文件請參閱 官方文件( 譯者注:國內使用者可訪問 該頁面 )。

示例 4.20 time.go

package main
import (
	"fmt"
	"time"
)

var week time.Duration
func main() {
	t := time.Now()
	fmt.Println(t) // e.g. Wed Dec 21 09:52:14 +0100 RST 2011
	fmt.Printf("%02d.%02d.%4d\n", t.Day(), t.Month(), t.Year())
	// 21.12.2011
	t = time.Now().UTC()
	fmt.Println(t) // Wed Dec 21 08:52:14 +0000 UTC 2011
	fmt.Println(time.Now()) // Wed Dec 21 09:52:14 +0100 RST 2011
	// calculating times:
	week = 60 * 60 * 24 * 7 * 1e9 // must be in nanosec
	week_from_now := t.Add(week)
	fmt.Println(week_from_now) // Wed Dec 28 08:52:14 +0000 UTC 2011
	// formatting times:
	fmt.Println(t.Format(time.RFC822)) // 21 Dec 11 0852 UTC
	fmt.Println(t.Format(time.ANSIC)) // Wed Dec 21 08:56:34 2011
	fmt.Println(t.Format("02 Jan 2006 15:04")) // 21 Dec 2011 08:52
	s := t.Format("20060102")
	fmt.Println(t, "=>", s)
	// Wed Dec 21 08:52:14 +0000 UTC 2011 => 20111221
}

輸出的結果已經寫在每行 // 的後面。

如果你需要在應用程式在經過一定時間或週期執行某項任務(事件處理的特例),則可以使用 time.After 或者time.Ticker:我們將會在第 14.5 節討論這些有趣的事情。 另外,time.Sleep(Duration d) 可以實現對某個程式(實質上是 goroutine)時長為 d 的暫停。


相關文章