go--time 模塊
time 模塊
獲取當前的時間和月份
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now() // 獲取當前時間
fmt.Println(t)
fmt.Println(t.Date()) // 獲取日期
fmt.Println(t.Year()) // 獲取年份
fmt.Println(t.Month()) // 獲取月份
fmt.Println(t.Day()) // 獲取日
fmt.Println(t.Hour()) // 獲取小時
fmt.Println(t.Minute()) // 獲取分鐘
fmt.Println(t.Second()) // 獲取秒
fmt.Println(t.UnixMilli()) // 毫秒
fmt.Println(t.UnixMicro()) // 微秒
fmt.Println(t.UnixNano()) // 納秒
fmt.Println(t.Weekday()) // 返回當前日期是星期幾,類型是 time.WeekDay
fmt.Println(t.Weekday().String()) // 返回當前日期是星期幾,類型是字符串
fmt.Println(t.YearDay()) // 返回當前日期在今年的第幾天
// 需要注意的是t.Weekday() 返回的是 time.WeekDay類型, 而不是字符串
// 如果想要變成字符串 可以使用 t.Weekday().String()
}
結果
2022-12-15 17:02:29.522366 +0800 CST m=+0.000063272
2022 December 15
2022
December
15
17
2
29
1671094949522
1671094949522366
1671094949522366000
Thursday
Thursday
349
計算時間差
計算時間差我們可以使用 Sub 或者 time.Since() 來獲取
package main
import (
"fmt"
"time"
)
func main() {
t1 := time.Now() // 獲取當前時間
time.Sleep(2 * time.Second)
t2 := time.Now() // 獲取當前時間
d1 := t2.Sub(t1) // 計算 t2 跟 t1 的時間差,返回類型是 time.Duration
fmt.Println(d1) // 默認是秒
fmt.Println(d1.Microseconds()) //也可以取微秒
d2 := time.Since(t1) // 等價于上面的 Sub,會自動獲取當前時間減去 t1
fmt.Println(d2) // 默認是秒,也可以取其他的單位
}
結果
2.003652994s
2003652
2.003733078s
時間的格式化
有時候我們想獲取當前的時間,就可以使用 time.Now().Format 來獲取了
package main
import (
"fmt"
"time"
)
func main() {
TimeFmt := "2006-01-02 15:04:05" // 必須為這個時間,其中的空格、-、: 可以換成你想要的格式,但時間不能換
now := time.Now()
fmt.Println(now) // 2022-12-15 16:36:11.868534 +0800 CST m=+0.000058206
ts := time.Now().Format(TimeFmt)
fmt.Println(ts) // 2022-12-15 16:36:11
}
結果
2022-12-15 16:36:11.868534 +0800 CST m=+0.000058206
2022-12-15 16:36:11
設置時區(qū)
時區(qū)可以通過 time.LoadLocation() 來進行設置
package main
import (
"fmt"
"time"
)
func main() {
TimeFmt := "2006-01-02 15:04:05" // 必須為這個時間,其中的空格、-、: 可以換成你想要的格式,但時間不能換
now := time.Now()
fmt.Println(now) // 2022-12-15 16:39:04.932655 +0800 CST m=+0.000144887
ts := time.Now().Format(TimeFmt)
fmt.Println(ts) // 2022-12-15 16:39:04
loc, _ := time.LoadLocation("Asia/Shanghai") // 設置時區(qū)為上海
t, _ := time.ParseInLocation(TimeFmt, ts, loc) // 第一個參數(shù)是格式化,第二個是要格式化的時間,第三個是時區(qū)
fmt.Println(t) // 2022-12-15 16:39:04 +0800 CST
}
時間的加減 Add 和 AddDate
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now() // 獲取當前時間
fmt.Println("當前時間為:", t)
fmt.Println("十分鐘后的時間為:", t.Add(time.Minute*10)) //time.Minute 為一分鐘,乘以 10 就是 10 分鐘
fmt.Println("十分鐘前的時間為:", t.Add(time.Minute*-10)) // 乘以 -10
fmt.Println("一天后的時間為:", t.Add(time.Hour*24)) // time.Hour 為 1 小時
/* 使用 AddDate */
// AddDate 有三個參數(shù),分別是 年、月、日
fmt.Println("一年兩個月三天后的時間為:", t.AddDate(1, 2, 3))
}
結果
當前時間為: 2022-05-04 14:01:38.303554 +0800 CST m=+0.000174644
十分鐘后的時間為: 2022-05-04 14:11:38.303554 +0800 CST m=+600.000174644
十分鐘前的時間為: 2022-05-04 13:51:38.303554 +0800 CST m=-599.999825356
一天后的時間為: 2022-05-05 14:01:38.303554 +0800 CST m=+86400.000174644
一年兩個月三天后的時間為: 2023-07-07 14:01:38.303554 +0800 CST
字符串于 time.Time 的轉換
package main
import (
"fmt"
"reflect"
"time"
)
func main() {
t := time.Now() // 獲取當前時間,類型為 time.Time
fmt.Println("t 的類型為:", reflect.TypeOf(t))
fmt.Println("當前時間為:", t)
utcTime := t.Format(time.RFC3339)
fmt.Println("utcTime 的類型為:", reflect.TypeOf(utcTime))
fmt.Println(utcTime) // 轉為標準時間字符串
// 標準時間字符串,轉為 time.Time 類型
newTime, err := time.Parse(time.RFC3339, utcTime) // 解析有可能出錯
if err != nil {
fmt.Println("解析錯誤:", err)
} else {
fmt.Println(newTime)
fmt.Println("newTime 的類型為:", reflect.TypeOf(newTime))
}
}
結果
t 的類型為: time.Time
當前時間為: 2022-05-04 14:15:22.967382 +0800 CST m=+0.000193253
utcTime 的類型為: string
2022-05-04T14:15:22+08:00
2022-05-04 14:15:22 +0800 CST
newTime 的類型為: time.Time

浙公網安備 33010602011771號