目錄
time?包方法總結
類型?time.Time?的方法
庫函數
代碼示例:
time
?包方法總結
類型?time.Time
?的方法
方法名 | 描述 | 示例 ? |
---|---|---|
Now() | 獲取當前時間和日期 | time.Now() |
Format() | 格式化時間為字符串 | time.Now().Format("2006-01-02 15:04:05") |
Add() | 增加指定時間 | time.Now().Add(2 * time.Hour) |
Hour() | 獲取小時部分 | time.Now().Hour() |
Date() | 獲取年、月、日部分 | time.Now().Date() |
Before() | 判斷當前時間是否在指定時間之前 | time.Now().Before(time.Now()) |
AddDate() | 增加年、月、日 | time.Now().AddDate(1, 2, 3) |
Clock() | 獲取小時、分鐘、秒部分 | time.Now().Clock() |
After() | 判斷當前時間是否在指定時間之后 | time.Now().After(time.Now().Add(-1 * time.Hour)) |
Compare() | 比較時間,返回-1(當前時間小于指定時間)、0(相等)、1(當前時間大于指定時間) | time.Now().Compare(time.Now().Add(-1 * time.Hour)) |
Equal() | 判斷兩個時間是否相等 | time.Now().Equal(time.Now()) |
Weekday() | 獲取星期幾 | time.Now().Weekday() |
Truncate() | 截斷時間到最接近但不超過的倍數時間 | time.Now().Truncate(24 * time.Hour) |
In() | 轉換為指定時區 | time.Now().In(time.UTC) |
String() | 返回時間字符串 | time.Now().String() |
庫函數
方法名 | 描述 | 示例 ? |
---|---|---|
Parse() | 解析字符串為時間 | time.Parse("2006/01/02", "2022/05/19") |
Add() | 增加指定時間 | future := time.Now().Add(2 * time.Second) |
Sub() | 計算時間差 | diff := future.Sub(time.Now()) |
Sleep() | 阻塞當前 goroutine 一段時間 | time.Sleep(2 * time.Second) |
AfterFunc() | 在指定時間后執行函數 | time.AfterFunc(diff, func() { ... }) |
NewTimer() | 創建一個計時器 | timer := time.NewTimer(5 * time.Second) |
Stop() | 停止計時器 | timer.Stop() |
Since() | 計算從某個時間到現在的時間差 | time.Since(start) |
Date() | 創建一個新的時間 | time.Date(2025, time.March, 29, 20, 38, 0, 0, time.UTC) |
After() | 返回一個在指定時間后的通道 | time.After(2 * time.Hour) |
代碼示例:
package mainimport ("fmt""time"
)func main() {// 當前時間fmt.Println(time.Now())// 格式化,stringfmt.Println(time.Now().Format("2006-01-02 15:04:05"))fmt.Println(time.Now().Format("2006.01.02 15:04:05.000"))fmt.Println(time.Now().Format("2006/01/02 15/04/05"))// --------------------------類型time.fmt.Println("--------------------")fmt.Println(time.Now().Add(2 * time.Hour))fmt.Println(time.Now().Hour())fmt.Println(time.Now().Date()) // year int, month Month, day intfmt.Println(time.Now().Before(time.Now()))fmt.Println(time.Now().AddDate(1, 2, 3))fmt.Println(time.Now().Clock()) // hour int, min int, sec intfmt.Println(time.Now().After(time.Now().Add(-1 * time.Hour))) // truefmt.Println(time.Now().Compare(time.Now().Add(-1 * time.Hour))) // 調用者小于t返回-1,等于返回0,大于返回1。fmt.Println(time.Now().Equal(time.Now()))fmt.Println(time.Now().Weekday())fmt.Println(time.Now().Truncate(24 * time.Hour)) //截斷到最接近但不超過原始時間的d的倍數。截斷到最近的一天開始時刻fmt.Println(time.Now().In(time.UTC)) // 轉換為UTC時區fmt.Println(time.Now().String())// ----------------------------庫time.fmt.Println("--------------------")// 解析parseTime, _ := time.Parse("2006/01/02", "2022/05/19")fmt.Println(parseTime) // 2022-05-19 00:00:00 +0000 UTC// 運算future := time.Now().Add(2 * time.Second)fmt.Println(future)diff := future.Sub(time.Now())fmt.Println(diff)// 延時、定時var start = time.Now()time.Sleep(2 * time.Second)time.AfterFunc(diff, func() {fmt.Println("時間到")})// timertimer := time.NewTimer(5 * time.Second)fmt.Println("開始等待")<-timer.C // 經過指定的時間間隔后發送當前時間到它的通道(C);阻塞直到計時器到期//time.Timer 對象包含一個名為 C 的通道(channel),其類型為 <-chan Time。這個通道用于接收計時器到期的通知。//具體來說,當你創建了一個 time.Timer 并設置了一定的持續時間后,這個定時器會在設定的時間間隔后通過它的 C 通道發送當前的時間信息。fmt.Println("5秒過去了")// 等價于time.After(5 * time.Second)timer = time.NewTimer(5 * time.Second)stopped := timer.Stop() //如果計時器已經在通道上發送了值,則 Stop 不會有任何效果。if stopped {fmt.Println("計時器已成功停止")} else {fmt.Println("計時器未能停止")}// 注意:這里需要防止goroutine泄露,實際應用中應謹慎處理select {case <-timer.C:// 如果計時器到期,這里會被觸發default:// 如果計時器被成功停止,這里什么都不會發生}// 其他fmt.Println(time.Since(start))// 輸出: 2025-03-29 20:38:00 +0000 UTCfmt.Println(time.Date(2025, time.March, 29, 20, 38, 0, 0, time.UTC))fmt.Println(time.After(2 * time.Hour)) // 打印通道本身,而非時間點
}