go time包的使用

類型

time.Time{}

時間類型,包含了秒和納秒以及Location

wall uint64//秒
ext  int64//納秒
loc *Location

time.Month()

type Month int

月份.定義了十二個月的常量

Weekday

type Weekday int 周,定義了一周的七天

Duration

time.Duration()

持續時間.定義了以下持續時間類型.多用于時間的加減 需要傳入Duration做為參數的時候

const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

Location

在time包里有兩個時區變量:

time.UTC utc時間
time.Local 本地時間
FixedZone(name string, offset int) *Location
設置時區名,以及與UTC0的時間偏差.返回Location

Timer(定時器)

定時器只會傳達一次到期事件,

type Timer struct {
    C <-chan Time
    r runtimeTimer
}

Ticker(斷續器)

周期性的傳達到期事件的裝置,

定時器只會傳達一次到期事件,斷續器會持續工作直到停止

type Ticker struct {
    C <-chan Time // The channel on which the ticks are delivered.
    r runtimeTimer
}

time包的常用函數

time.Now()

獲取當前時間,返回Time類型

func Sleep(d Duration)

表示睡多少時間,睡覺時,是阻塞狀態

Since(t Time) Duration

返回與當前時間的時間差

Unix(sec int64, nsec int64) Time

根據秒數和納秒,返回Time類型

(若只有秒或者毫秒,另一個參數為零)

func Until(t Time) Duration

計算t到當前的時間差.返回類型Duration

func After(d Duration) <-chan Time

返回一個time.C這個管道,d(時間間隔)后會在此管道中放入一個時間點(time.Now())

func AfterFunc(d Duration, f func()) *Timer

將一個間隔和一個函數給AfterFunc后,間隔時間過后,執行傳入的函數(執行一遍)

func NewTimer(d Duration) *Timer

新的定時創建一個新的定時器,將當前時間的通道后至少持續時間D.

func Parse(layout, value string) (Time, error)

將字符竄轉換為Time類型.

layout := ""2006-01-02 15:04:05.999999""
t, _ := time.Parse(layout, "2013-10-05 18:30:50")
fmt.Println(t.Year())
// 當前時區時間格式化轉換
strTime := "2018-03-24T20:01:00+08:00"
tim, _:=time.ParseInLocation("2006-01-02T15:04:05+08:00", strTime, time.Local)

func ParseDuration(s string) (Duration, error)

將字duration符竄("ns", "us" (or "碌s"), "ms", "s", "m", "h".)轉換為Duration類型.就是納秒

t, _ := time.ParseDuration("1h")
fmt.Println(t.Seconds())

func ParseInLocation(layout, value string, loc *Location) (Time, error)

parseinlocation像解析,但在兩個重要方面不同。首先,在時區信息的情況下,分析解釋時間UTC;parseinlocation解釋時間在給定的位置。其次,當給定一個帶偏移或縮寫,解析試圖匹配與局部的位置;parseinlocation使用給定的位置。

func NewTicker(d Duration) *Ticker

創建一個新的Ticker

func Tick(d Duration) <-chan Time

返回一個time.C這個管道,d(時間間隔)后會在此管道中放入一個時間點(time.Now())

func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time

設置年月日返回,Time類型

LoadLocation(name string) (*Location, error)

給定名稱返回位置

func FixedZone(name string, offset int) *Location

給定名稱和偏移量返回位置

Time類型

After(u Time) bool

時間類型比較,是否在Time之后

Before(u Time) bool

時間類型比較,是否在Time之前

Equal(u Time) bool

比較兩個時間是否相等

IsZero() bool

判斷時間是否為零值,如果sec和nsec兩個屬性都是0的話,則該時間類型為0

Date() (year int, month Month, day int)

返回年月日,三個參數

Year() int

返回年份

Month() Month

返回月份.是Month類型

Day() int

返回多少號

Weekday() Weekday

返回星期幾,是Weekday類型

ISOWeek() (year, week int)

返回年份,和該填是在這年的第幾周.

Clock() (hour, min, sec int)

返回小時,分鐘,秒

Hour() int

返回小時

Minute() int

返回分鐘

Second() int

返回秒數

Nanosecond() int

返回納秒

Unix() int64

返回時間戳,自從1970年1月1號到現在的秒值

UnixNano() int64

返回時間戳.包含納秒值

func (t Time) Format(layout string) string

將時間轉化為一個格式

t.Format("2006-01-02 15:04")

Add(d Duration) Time

為一個時間,添加的時間類型為Duration.更精確到納秒.比起AddDate

Sub(u Time) Duration

計算兩個時間的差.返回類型Duration

AddDate(years int, months int, days int) Time

添加時間.以年月日為參數

UTC() Time

設置location為UTC,然后返回時間.就是utc為0.比中國晚了八個小時.

Local() Time

設置location為本地時間.就是電腦時間.

In(loc *Location) Time

設置location為指定location

Location() *Location

獲取時間的Location,如果是nic,返回UTC,如果為空,則代表本地

Zone() (name string, offset int)

返回時區,以及與utc的時間偏差

一般時間的操作

獲取當前時間

now := time.Now()

納秒/毫秒/秒轉換

fmt.Println(ns / 1e6) //納秒轉毫秒
fmt.Println(ns / 1e9) //納秒轉秒

格式化時間

time.Now().Format("2006-01-02 15:04")

字符串轉Time

withNanos := "2006-01-02 15:04:05"
t, _ := time.Parse(withNanos, "2013-10-05 18:30:50")
fmt.Println(t.Year())

定時器

go func() {
    var timer *time.Timer
    for   {
        select {
        case <- func() <-chan time.Time {
            if timer==nil {
                timer=time.NewTimer(time.Millisecond)
            }else {
                timer.Reset(time.Millisecond)
            }
            return timer.C
        }():
            fmt.Println("time out")
            break
        }
    }
}()

斷續器(每隔固定時間執行一次)

var ticker *time.Ticker=time.NewTicker(time.Millisecond)
ticks:=ticker.C
go func() {
    for tick:=range ticks {
        fmt.Println(tick)
    }
}()

定時每天固定時間

func TestPayCenterWrite(t *testing.T) {
    timeNow := time.Now() //獲取當前時間
    //獲取當前零時
    zeroHour := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 0, 0, 0, 0, timeNow.Location())
    //獲取下一個零時
    next := zeroHour.Add(time.Hour * 24)
    //當前時間和下一個零時創建時間差創建定時器
    timer := time.NewTimer(next.Sub(timeNow))
    <-timer.C
    go func()
    var ticker *time.Ticker = time.NewTicker(time.Hour * 24)
    ticks := ticker.C
    for range ticks {
        go func()
    }
}

計算兩個點的時間差

func TestMountSubrouterOn(t *testing.T) {
    createTime:="2018-05-07 16:20:23"
    create_Time, _ := time.ParseInLocation("2006-01-02 15:04:05", createTime,time.Now().Location())
    sub:=time.Now().Sub(create_Time)
    fmt.Println(sub.Minutes())
    fmt.Println(create_Time.Location().String())
    fmt.Println(time.Now().Location())
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • 原文鏈接 http://ironxu.com/747 介紹Go 標準庫 time 常用導出函數,結構體及其方法。 ...
    好剛編程閱讀 16,982評論 2 11
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,818評論 18 139
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,872評論 0 38
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,067評論 6 13
  • 霜林遍染離人淚,霧花空望故人情。此愁漫漫何處銷,付與春水流至冰。
    王神馬閱讀 212評論 0 1