Go常用時間操作
阿新 • • 發佈:2022-03-24
設定時區
var cstZone = time.FixedZone("CST", 8*3600) // 東八
time.Local = cstZone
// https://www.cnblogs.com/foxhappy/p/14577735.html
獲取操作
當前時間
package main import ( "fmt" "time" ) var ( cstZone = time.FixedZone("CST", 8*3600) // 東八區 ) func main() { fmt.Println(time.Now().In(cstZone).Format("2006-01-02 15:04:05")) fmt.Println(time.Now().In(cstZone).Unix()) // 當前時間戳 1648108391 fmt.Println(time.Now().In(cstZone).UnixNano()) // 當前納秒時間戳 1648108391123158200 fmt.Println(time.Now().In(cstZone).Nanosecond()) // 獲取時間戳的納秒部分 123678500 }
獲取當前年月日時分秒、星期幾、一年中的第幾天等操作
package main import ( "fmt" "time" ) var ( cstZone = time.FixedZone("CST", 8*3600) // 東八區 format = "2006-01-02 15:04:05" ) func main() { now, _ := time.ParseInLocation(format, "2022-01-01 00:00:00", cstZone) fmt.Printf("%d %d %d\n", now.Year(), now.Month(), now.Day()) // 獲取年月日 fmt.Printf("%d %d %d\n", now.Hour(), now.Minute(), now.Second()) // 獲取時分秒 fmt.Printf("%d \n", now.YearDay()) //獲取一年中的第幾天 1開始 now = now.AddDate(0, 0, 1) fmt.Printf("%d \n", now.Weekday()) // 獲取一週中的第幾天, 週日=0 /* 2022 1 1 0 0 0 1 0 */ }
轉換操作
字串轉時間戳
package main
import (
"fmt"
"time"
)
var (
cstZone = time.FixedZone("CST", 8*3600) // 東八區
)
func main() {
date, _ := time.ParseInLocation("2006-01-02 15:04:05",
time.Now().In(cstZone).Format("2006-01-02 15:04:05"),
cstZone)
fmt.Println(date.Unix())
}
時間戳轉字串
package main import ( "fmt" "time" ) var ( cstZone = time.FixedZone("CST", 8*3600) // 東八區 ) func main() { date, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().In(cstZone).Format("2006-01-02 15:04:05"), cstZone) fmt.Println(time.Unix(date.Unix(), 0).Format("2006-01-02 15:04:05")) }
日期和時間操作
獲取過去的日期
package main
import (
"fmt"
"time"
)
var (
cstZone = time.FixedZone("CST", 8*3600) // 東八區
timeFormat = "2006-01-02 15:04:05"
)
func main() {
fmt.Println(time.Now().In(cstZone).AddDate(0, 0, -1).Format(timeFormat)) // 獲取昨天的日期
}
獲取未來的日期
package main
import (
"fmt"
"time"
)
var (
cstZone = time.FixedZone("CST", 8*3600) // 東八區
timeFormat = "2006-01-02 15:04:05"
)
func main() {
fmt.Println(time.Now().In(cstZone).AddDate(0, 0, 1).Format(timeFormat)) // 獲取明天的日期
}
獲取過去和未來的時間
package main
import (
"fmt"
"time"
)
var (
cstZone = time.FixedZone("CST", 8*3600) // 東八區
format = "2006-01-02 15:04:05"
)
func main() {
now := time.Now().In(cstZone)
// before, _ := time.ParseDuration("-10s") // 獲取10s之前的時間
// before, _ := time.ParseDuration("-10m") // 獲取10m之前的時間
// before, _ := time.ParseDuration("-10h") // 獲取10h之前的時間
before, _ := time.ParseDuration("10h10m10s") // 獲取10h10m10s之後的時間
now = now.Add(before)
fmt.Println(before)
fmt.Println(now.Format(format))
}
時間比較操作
過去獲未來
package main
import (
"fmt"
"time"
)
var (
cstZone = time.FixedZone("CST", 8*3600) // 東八區
)
func main() {
// 如果 t 代表的時間點在 u 之前,返回真;否則返回假。
// func (t Time) Before(u Time) bool
// 如果 t 代表的時間點在 u 之後,返回真;否則返回假。
// func (t Time) After(u Time) bool
// 比較時間是否相等,相等返回真;否則返回假。
// func (t Time) Equal(u Time) bool
now := time.Now().In(cstZone)
yesterday := time.Now().In(cstZone).AddDate(0, 0, -1)
fmt.Println(now.After(yesterday))
fmt.Println(yesterday.Before(now))
fmt.Println(now.Equal(yesterday))
}
時間相差
package main
import (
"fmt"
"time"
)
var (
cstZone = time.FixedZone("CST", 8*3600) // 東八區
)
func main() {
// 返回當前時間與 t 的時間差,返回值是 Duration
// time.Since(t Time) Duration
// 返回 t 與當前時間的時間差,返回值是 Duration
// time.Until(t Time) Duration
now := time.Now().In(cstZone)
before, _ := time.ParseDuration("-1h")
now = now.Add(before)
fmt.Println(time.Since(now))
fmt.Println(time.Until(now))
}