Go中Time包的使用
阿新 • • 發佈:2020-08-19
1.獲取當前時間
// 獲取當前時間,返回的是Time型別
t := time.Now()
fmt.Println(t)
2.獲取時間戳
1970-01-01開始經過的秒數。
// 獲取當前時間的時間戳
s := time.Now().Unix()
// 獲取某個Time時間的時間戳。
// t是Time型別物件
s := t.Unix()
3.格式化時間
如何將Time型別轉換成我們想要的字串時間格式。
// 獲取當前時間
t := time.Now()
// 按指定格式,格式化時間
s := t.Format("2006-01-02 15:04:05")
fmt.Println(s)
// 返回年月日
year, month, day := t.Date()
// 返回是時分秒
hour,minute,sec := t.Clock()
// 返回星期幾,從0開始
weekday := t.Weekday()
// 可以轉換成整數
fmt.Println(int(weekday))
輸出:
2019-09-15 10:43:14
格式化時間主要通過Time物件的Format函式處理。
函式定義:
func (t Time) Format(layout string) string
只有一個引數layout,layout就是指定我們需要格式化時間的模版。
下面是Time包預定於的時間模版:
const (
ANSIC = "Mon Jan _2 15:04:05 2006"
UnixDate = "Mon Jan _2 15:04:05 MST 2006"
RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
RFC822 = "02 Jan 06 15:04 MST"
RFC822Z = "02 Jan 06 15:04 -0700" // 使用數字表示時區的RFC822
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // 使用數字表示時區的RFC1123
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
)
使用例子:
t := time.Now()
// 使用預定義的時間模版time.RFC3339
fmt.Println(t.Format(time.RFC3339))
輸出:
2019-09-15T10:50:03+08:00
時間模版裡面的引數不能隨便書寫,建議大家根據上面預定義的時間模版,進行修改。
例子:
// 獲取當前時間
t := time.Now()
// 只需要格式化年月日
tpl1 := "2006-01-02"
fmt.Println(t.Format(tpl1))
// 只需要格式化輸出時間
tpl2 := "15:04:05"
fmt.Println(t.Format(tpl2))
4.時間戳和日期互轉
go的Time時間型別可以轉換成時間戳,也能轉換成字串日期型別,因此我們只要將時間戳或者日期時間(字串)轉換成Time型別,即可完成自由轉換。
4.1. 時間戳轉日期
// 將時間戳轉換成Time型別
// 第一個引數是時間戳(毫秒),第二個引數是納秒,設定0即可
t := time.Unix(1568516266,0)
// 將Time轉換成我們想要的日期格式。
s := t.Format("2006-01-02 15:04:05")
fmt.Println(s)
4.2. 日期轉時間戳
// 將日期轉換成Time型別
// 獲取本地時區,重要
loc, _ := time.LoadLocation("Local")
// 指定我們要解析的時間模版
l := "2006-01-02 15:04:05"
// 呼叫ParseInLocation函式,將日期格式轉換成Time型別
t, _ := time.ParseInLocation(l, "2019-09-15 10:57:46", loc)
// 將Time轉換成時間戳
s := t2.Unix()
fmt.Println(s)
5.時間計算
專案中經常需要計算時間的前一天、後一天、前一週、上一月。
Time型別常用的時間計算函式:
- Add - 返回增加指定時間的Time
- AddDate - 返回增加指定的年份、月份和天數的時間點Time
- Sub - 返回兩個Time型別相減的時間間隔(Duration型別)
5.1. Add
函式定義:
func (t Time) Add(d Duration) Time
Add返回時間點t+d。
例子:
t := time.Now()
// 計算前一分鐘,當前時間加上負一分鐘
t1 := t.Add(-time.Minute)
5.2. AddDate
函式定義:
func (t Time) AddDate(years int, months int, days int) Time
AddDate返回增加了給出的年份、月份和天數的時間點Time。
例子:
t := time.Now()
// 計算前一天, 當前時間加上0年,0月,-1天
t1 := t.AddDate(0,0,-1)
// 計算上一個月時間,當前時間加上0年,-1月,0天
t1 := t.AddDate(0,-1,0)
5.3. Sub
函式定義:
func (t Time) Sub(u Time) Duration
返回一個時間段t-u。如果結果超出了Duration可以表示的最大值/最小值,將返回最大值/最小值。要獲取時間點t-d(d為Duration),可以使用t.Add(-d)。
例子:
t := time.Now()
// 計算前一天
t1 := t.AddDate(0,0,-1)
// 兩個時間相減
s := t.Sub(t1)
// 因為時間間隔使用的是Duration型別,我們可以將時間單位轉換成小時
h := int(s/time.Hour)
// 也可以換成成其他單位,只要除於指定的時間常量即可:
// - Second 秒
// - Minute 分鐘
// - Hour 小時
fmt.Println(h)
6. 時間比較
Time型別常用的時間比較函式如下:
- Equal - 比較兩個時間是否相等
- Before - 相當於小於比較
- After - 相當於大於比較
例子:
t := time.Now()
// 計算前一天
t1 := t.AddDate(0,0,-1)
if t.Equal(t1) {
fmt.Println("時間相等")
}
if t1.Before(t) {
fmt.Println("時間t1 < t")
}
if t.After(t1) {