Go語言_時間篇


哎,先發下牢騷,Go文檔還是太弱了,特別是標准庫中的文檔說明,很多函數幾乎就一句話過了。這點確實該向Microsoft的MSDN好好學學。

 

Go的time包是標准庫中的包之一

不用說,幾乎是開發必須用到的包之一。time包的說明文檔在:

http://golang.org/pkg/time/

 

先注意下Overview中的一句話:

The calendrical calculations always assume a Gregorian calendar.

這個包的時間計算式是基於格里歷,就是我們使用的公歷。關於格里歷的歷史,可以看百度百科:

http://baike.baidu.com/view/391054.htm

 

看看godoc文檔,最大的數據類型就是Time了,這個Time類型最微小可以表示到nanosecond(微毫秒,十億份之一秒)。

clip_image001

 

Time的比較是使用Before,After和Equal方法。看一眼After:

func (t Time) After(u Time) bool

很好,返回的是bool類型,是我們所需要的。

 

Sub方法返回的是兩個時間點之間的時間距離,看上圖看到它返回的是Duration結構,這個結構的具體類型和操作也在godoc中

 

Add方法和Sub方法是相反的,獲取t0和t1的時間距離d是使用Sub,將t0加d獲取t1就是使用Add方法

 

IsZero方法:Time的zero時間點是January 1, year 1, 00:00:00 UTC,這個函數判斷一個時間是否是zero時間點

 

Local,UTC,Ln是用來顯示和計算地區時間的。

 

下面從幾個需求直接看time的使用

1 請打出當前時間的時間戳,然后將時間戳格式為年月日時分秒的形式

package main

import (
    "fmt"
    "time"
)

func main() {
    //時間戳
    t := time.Now().Unix()
    fmt.Println(t)
    
    //時間戳到具體顯示的轉化
    fmt.Println(time.Unix(t, 0).String())
    
    //帶納秒的時間戳
    t = time.Now().UnixNano()
    fmt.Println(t)
    fmt.Println("------------------")
    
    //基本格式化的時間表示
    fmt.Println(time.Now().String())
    
    fmt.Println(time.Now().Format("2006year 01month 02day"))

}

顯示:

clip_image002

特別是Format這個函數,可以好好使用

2 輸出當前星期幾?

package main

import (
    "fmt"
    "time"
)

func main() {
    //時間戳
    t := time.Now()
    fmt.Println(t.Weekday().String())

}

clip_image003

 

文檔中對這個Weekday類型就沒有說明!!沒法,直接看代碼可以看到:

clip_image004

 

Weekday有一個String()方法

好了,看到這里外帶我們有一個推測:

 

當一個結構中有定義String()函數的時候,fmt.Println()是會調用String的

例子如下:

package main

import (
    "fmt"
)

type MyStruct struct{
}

func (d MyStruct)String() string {return "mystruct"}

func main() {
    me := new(MyStruct)
    fmt.Println(me)

}

clip_image005

 

Go的Time之旅結束!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM