時間類型
time.Time類型表示時間。
//時間類型 func timeDemo() { now := time.Now() fmt.Println(now) //2019-04-20 13:52:35.226397 +0800 CST m=+0.000336111 fmt.Println(now.Format("2006-01-02 15:04")) //2019-04-20 13:52 year := now.Year() month := now.Month() day := now.Day() hour := now.Hour() minute := now.Minute() second := now.Second() //輸出格式可以自定義 fmt.Printf("%d,%02d,%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second) //2019,04,24 18:13:48
}
//字符串類型轉time s4 := "1999年10月19日" //字符串 t4, err := time.Parse("2006年01月02日", s4) if err != nil { fmt.Println("err", err) } fmt.Println(t4)
時間戳
時間戳是自1970年1月1日(08:00:00GMT)至當前時間的總毫秒數。它也被稱為Unix時間戳(UnixTimestamp)。
//時間戳
func timestampDemo() {
now := time.Now()
timestamp := now.Unix()
fmt.Println(timestamp) //1556101693
}
time.Unix()函數將時間戳轉為時間格式。
func timestampDemo2(timestamp int64) {
timeObj := time.Unix(timestamp, 0) //將時間戳轉為時間格式
fmt.Println(timeObj) //2019-04-24 18:30:12 +0800 CST
year := timeObj.Year() //年
month := timeObj.Month() //月
day := timeObj.Day() //日
hour := timeObj.Hour() //小時
minute := timeObj.Minute() //分鍾
second := timeObj.Second() //秒
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second) //2019-04-24 18:30:12
}
時間間隔
Duration類型代表兩個時間點之間經過的時間,以納秒為單位。
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
時間加時間間隔
語法:
func (t Time) Add(d Duration) Time
示例:計算1小時后及1小時前時間
func main() {
now := time.Now()
later := now.Add(time.Hour)
fmt.Println(later)
before := now.Add(-time.Hour)
fmt.Println(before)
}
定時器
time.Tick(時間間隔)來設置定時器。
//定時器,每隔1s打印下i
func tickDemo() {
ticker := time.Tick(time.Second)
for i := range ticker{
fmt.Println(i)
}
}
睡眠sleep
time.Sleep(3 *time.Second)
fmt.Println("睡眠3s")
睡眠[1-10隨機數]
//睡眠[1-10隨機數]
rand.Seed(time.Now().UnixNano())
randNum := rand.Intn(10) + 1 //int類型,需要轉換
fmt.Println(randNum)
time.Sleep(time.Duration(randNum) * time.Second)
fmt.Printf("睡了%d秒\n", randNum)
時間格式化
Go語言中格式化時間模板不是常見的Y-m-d H:M:S而是使用Go的誕生時間2006年1月2號15點04分(記憶口訣為2006 1 2 3 4 5)。
//時間格式化
func formatDemo() {
now := time.Now()
// 格式化的模板為Go的出生時間2006年1月2號15點04分
fmt.Println(now.Format("2006-01-02 15:04:05")) //2019-04-24 18:37:59
fmt.Println(now.Format("2006/01/02 15:04"))
fmt.Println(now.Format("15:04 2006/01/02"))
fmt.Println(now.Format("2006/01/02"))
}
時間比較
Equal
判斷時間是否相等,會有時區影響。
func (t Time) Equal(u Time) bool
Before
func (t Time) Before(u Time) bool
如果t代表的時間點在u之前,返回真;否則返回假。
After
func (t Time) After(u Time) bool
如果t代表的時間點在u之后,返回真;否則返回假。