golang的time包

  • Time對象轉換爲string和時間戳調用Time對象的方法
    • 轉換爲string:Time.Format(輸出的格式)
    • 轉換爲時間戳 :Time.Unix()
  • 二者轉換爲Time對象的時候調用的是time包的方法
    • string轉換:time.Parse("輸出格式",string字符串)
    • 時間戳對象轉換:time.unix(秒,納秒)
  • go1.9以前, time.Time的定義爲git

    type Time struct {
      sec int64
      nsec int32
      loc *Location
    }
    //sec表示從公元1年1月1日00:00:00UTC到要表示的整數秒數,
    //nsec表示餘下的納秒數, 它必須在[0,999999999]範圍內。
    //loc表示時區. sec和nsec處理沒有歧義的時間值, loc處理偏移量.
package main

import (
    "github.com/golang/glog"
    "time"
    "fmt"
)

func main()  {
    fmt.Println(time.Now().AddDate(0,0,100).Unix())
    // 獲取當前時間,返回time.Time對象
    fmt.Println(time.Now())
    /*
    輸出:2019-06-12 22:21:37.7036 +0800 CST m=+0.000255350
    其中CST可視爲美國,澳大利亞,古巴或中國的標準時間
    +0800表示比UTC時間快8個小時
    */

    // 獲取當前時間戳,單位是秒
    fmt.Println(time.Now().Unix())

    // 精確到納秒,經過納秒就能夠計算出毫秒和微妙
    fmt.Println(time.Now().UnixNano())

    //fmt.Println(time.Now().AddDate(0,0,30).Unix())


    // 獲取當前時間,進行格式化
    /*
    月份 1,01,Jan,January
    日  2,02,_2
    時  3,03,15,PM,pm,AM,am
    分  4,04
    秒  5,05
    年  06,2006
    周幾 Mon,Monday
    時區時差表示 -07,-0700,Z0700,Z07:00,-07:00,MST
    時區字母縮寫 MST
    */
    fmt.Println("=============月份===========")
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Now().Format("2006-1-02 15:04:05"))
    fmt.Println(time.Now().Format("2006-Jan-02 15:04:05"))
    fmt.Println(time.Now().Format("2006-January-02 15:04:05"))


    fmt.Println("==================日期==============")
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Now().Format("2006-01-2 15:04:05"))
    fmt.Println(time.Now().Format("2006-01-_2 15:04:05"))

    fmt.Println("==================小時==============")
    fmt.Println(time.Now().Format("2006-01-02 3:04:05"))
    fmt.Println(time.Now().Format("2006-01-02 03:04:05"))
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Now().Format("2006-01-02 3:04:05 PM"))
    fmt.Println(time.Now().Format("2006-01-02 3:04:05 pm"))
    fmt.Println(time.Now().Format("2006-01-02 15:04:05 AM"))
    fmt.Println(time.Now().Format("2006-01-02 15:04:05 am"))

    fmt.Println("==================分==============")
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Now().Format("2006-01-02 15:4:05"))

    fmt.Println("==================秒==============")
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Now().Format("2006-01-02 15:4:5"))


    fmt.Println("==================年==============")
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Now().Format("06-01-02 15:04:05"))


    fmt.Println(time.Now().Format("02/01/2006 15:04:05 PM"))

    //第一個參數是時間戳的秒,第二個參數是時間戳的納秒
    fmt.Println(time.Unix(1560350574,999748000).Format("2006-01-02 15:04:05"))
    //2019-06-12 22:42:54

    // 獲取指定時間戳的年月日,小時分鐘秒
    t:= time.Unix(1560350574,999748000)
    fmt.Printf("%d-%d-%d %d:%d:%d\n", t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())


    //時間字符串轉換爲時間戳
    // 先用time.Parse對時間字符串進行分析,若是正確會獲得一個time.Time對象
    t,err := time.Parse("2006-01-02 15:04:05","2019-06-12 22:47:29")
    if err!= nil {
        glog.Error(err)
    }
    fmt.Println(t)
    // 後面就能夠用time.Time對象的函數Unix進行獲取
    fmt.Println(t.Unix())

    //總結:string轉換爲time對象,time對象擁有不少函數

    fmt.Println("=====時間戳轉化爲一天開始的時候的時間戳===============")
    //根據時間戳獲取當日開始的時候的時間戳
    // 方法就是經過時間戳取到2016-01-01 00:00:00這樣的時間格式
    // 而後再轉成時間戳就OK了
    // 獲取月開始時間和年開始時間相似
    fmt.Println("==時間戳用time.Unix方法轉換爲time對象,time對象經過format函數返回指定格式的string===")
    time1 := time.Unix(1560350574,999748000).Format("2006-01-02")
    fmt.Println(time1)

    fmt.Println("====string想要轉換爲時間戳,須要先用time.Parse對時間字符串進行分析,若是正確會獲得一個time.Time對象=======")
    t,err = time.Parse("2006-01-02",time1)
    if err!= nil {
        glog.Error(err)
    }
    fmt.Println(t)

    fmt.Println("===========後面就能夠用time.Time對象的函數Unix進行獲取=======")
    fmt.Println(t.Unix())

    //獲取這個月開始的那一天的日期
    time1 = time.Unix(1560350574,999748000).Format("2006-01")
    fmt.Println(time1)

    t,err = time.Parse("2006-01",time1)
    if err!= nil {
        glog.Error(err)
    }
    fmt.Println(t)
    fmt.Println(t.Unix())


    //獲取今年開始的那個日期
    time1 = time.Unix(1560350574,999748000).Format("2006")
    fmt.Println(time1)

    t,err = time.Parse("2006",time1)
    if err!= nil {
        glog.Error(err)
    }
    fmt.Println(t)
    fmt.Println(t.Unix())


    // 休眠1秒
    // time.Millisecond    表示1毫秒
    // time.Microsecond    表示1微妙
    // time.Nanosecond    表示1納秒
    time.Sleep(1 * time.Second)
    // 休眠100毫秒
    time.Sleep(100 * time.Millisecond)

    /*
    獲取某一時區的如今時間-time.Now().In(), Time結構體的In()方法僅設置loc, 不會改變時間值.
    特別地, 若是是獲取如今的UTC時間, 能夠使用Time.Now().UTC().
    */

}

// 獲取月初時間
func  getEarlyMonthUnix()int64  {
    now := time.Now()
    tm :=time.Date(now.Year(),now.Month(),0,0,0,0,0,now.Location())
    fmt.Println(tm.Unix())
    return tm.Unix()
}

// 獲取零時時間
func GetZeroHourUnix() int64 {
    now := time.Now()
    tm := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
    return tm.Unix()
}

// 獲取當前小時時間
func GetNowHourUnix() int64 {
    now := time.Now()
    tm := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
    return tm.Unix()
}

// 獲取年初時間
func GetEarlyYearUnix() int64 {
    now := time.Now()
    tm := time.Date(now.Year(), 1, 1, 0, 0, 0, 0, now.Location())
    return tm.Unix()
}
相關文章
相關標籤/搜索