go time Format 格式化時間的使用

time

  1. 當前時間 time.Now()
  2. 把時間格式化成字符串(time->string) : time.Now().Format("2006-01-02 15:04:05")
  3. 把日期字符串轉化爲時間(string -> time) : time.Parse("01-02-2006", "06-17-2013")
  4. 把納秒轉化爲時間字符串(int64 -> string): time.Unix(timestamp, 0).Format("2006-01-02 15:04:05")
  5. 獲取當前時間納秒時間戳 time.Now().UnixNano()
  6. 本身組裝時間 time.Date() (看下面)
  7. 時間間隔多久time.Now().Truncate(時間)

string to time

layout := "2006-01-02 15:04:05"
str := "2016-07-25 11:45:26"
t, err := time.Parse(layout, str)
if err != nil {
    fmt.Println(err)
}
fmt.Println(t)

unix 時間格式化, 將int轉化爲時間

//普通unix時間轉換
func(timestamp int64) string {
    tm := time.Unix(timestamp, 0)
    return tm.Format("2006-01-02 15:04:05")
}

// nano 納秒轉換
func(timestamp float64, nsec int64) string {
    //納秒沒什麼用 前段不顯示 直接將小數捨棄轉化爲int64
    tm := time.Unix(int64(timestamp), nsec)
    return tm.Format("2006-01-02 15:04:05")
},

組裝時間

timeEnd := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 23, 59, 59, 0, time.Local)

時間 加,減,比較

type Duration int64 表示一個持續的時間,單位是納秒函數

  1. Add() 加
  2. Sub() 減
  3. Before() 比時間前的一段時間
  4. After() 比時間後的一段時間
package main

import (
	"fmt"
	"time"
)

func main() {
	t := time.Now()
	t2 := t.Add(24 * time.Hour) //當前時間加24小時,即明天的這個時間
	d := t2.Sub(t)
	fmt.Println(t)
	fmt.Println(t2)
	fmt.Println(d)
	if t.Before(t2) {
		//t 小 t2
		fmt.Println("t<t2")
	}
	if t2.After(t) {
		//t2大於 t fmt.Println("t2>t")
		//t2-t1,相差24小時
	}
	if t.Equal(t) {
		//判斷兩個時間是否相等等
		fmt.Println("t=t")
	}
}

定時器

Go 裏的定時器相關的函數有 time.After,time.AfterFunc,time.Tick 等unix

1.func After(d Duration) <-chan Time 等待一個時間段 d,而後把當前時間發送到 channel 中。與 NewTimer 等價code

package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println(time.Now())
	c := time.After(10 * time.Second) //返回 channel 類型,10秒後向 channel 發送當前時間
	t := <-c
	fmt.Println(t)
	tm := time.NewTimer(10 * time.Second) //NewTimer 返回 Timer 類型
	t = <-tm.C /*Timer 結構中有一個 channel C,10秒後,把當前時間發送到 C*/
	fmt.Println(t)
}

2.func AfterFunc(d Duration, f func()) *Timer,等待時間 d,而後調用函數 f。注意這裏的 函數 f 是不帶任何參數和返回值的orm

package main

import (
	"fmt"
	"time"
)

func Test() {
	fmt.Println("Hello world!", time.Now())
}
func main() {
	fmt.Println(time.Now())
	time.AfterFunc(10 * time.Second, Test)
	var str string
	fmt.Scan(&str) /*這裏主要是等待用戶輸入,不讓進程結束,進程結束定時器也就無效了。*/
}

3.Tick 與 After 有點相似,惟的區別是 After 等待時間到期後,定時器就結束了。Tick 是 每隔一段時間 d 都會向 channel 發送當前時間。進程

package main

import (
	"fmt"
	"time"
)

func main() {
	c := time.Tick(10 * time.Second)
	for t := range c {
		fmt.Println(t)
	}
}
相關文章
相關標籤/搜索