时间常量
const ( Nanosecond Duration = 1 // 纳秒 Microsecond = 1000 * Nanosecond // 微妙 Millisecond = 1000 * Microsecond // 毫秒 Second = 1000 * Millisecond // 秒 Minute = 60 * Second // 分钟 Hour = 60 * Minute // 小时 )
time.Second // 代表1秒 100 * time.Millisecond // 代表100毫秒
时间直接转时间戳为秒/纳秒的情况
时间转时间戳可以得到秒/纳秒两种计量单位,根据上面时间常量的转换关系,如果需要毫秒级别的时间戳的话,直接使用纳秒的结果除以 1e6 即可:
// 时间转时间戳 now := time.Now() // 单位是秒的结果: nowStampSecond := now.Unix() fmt.Println(nowStampSecond) // 1608360244 10位 // 单位是毫秒的结果(先转成纳秒再除以 1e6) nowStampmilli := now.UnixNano() / 1e6 fmt.Println(nowStampmilli) // 1608360325543 13位
获取当前时间与获取一个指定时区的时间
// 当地的时区 TIME_LOCATION_CST, _ := time.LoadLocation("Asia/Shanghai") // 获取当前时间 now := time.Now() // 将时间转成本地时区,指向的是同一个时间点 fmt.Println(now.Local()) // 2020-12-19 14:59:12.848224 +0800 CST // 将时间转换为0时区的时间 fmt.Println(now.UTC()) // 2020-12-19 06:59:12.848224 +0000 UTC // 根据指定值返回一个时间 用的是 Asia/Shanghai时区 ret := time.Date(2019,02,23,10,22,33,0,TIME_LOCATION_CST) fmt.Println(ret) // 2019-02-23 10:22:33 +0800 CST
时间字符串转时间1 (建议)
注意!这里的时间字符串一定要带上时区!
// 当地的时区 TIME_LOCATION_CST, _ := time.LoadLocation("Asia/Shanghai") // 时间字符串转时间 timeStr := "2020-12-22T13:33:15+0800" if timeRet, err := time.ParseInLocation("2006-01-02T15:04:05+0800", timeStr, TIME_LOCATION_CST); err == nil{ fmt.Printf("timeRet: %v, %T ", timeRet, timeRet) /* timeRet: 2020-12-22 13:33:15 +0800 CST, time.Time */ }else{ fmt.Println("err>> ",err) }
时间字符串转时间2(不建议)
注意:即使字符串带时区,使用Parse方法依然默认会转成UTC时间!
因为Parse源码里面直接使用的UTC去转的!不推荐这种方式!
// 时间字符串转时间 timeStr := "2020-12-22T13:33:15+0800" if timeRet, err := time.Parse("2006-01-02T15:04:05+0800", timeStr); err == nil{ fmt.Printf("timeRet: %v, %T ", timeRet, timeRet) /* timeRet: 2020-12-22 13:33:15 +0000 UTC, time.Time */ }else{ fmt.Println("err>> ",err) }
时间转化为字符串
// 时间字符串转时间 timeFormatStr := "2006-01-02T15:04:05+0800" now := time.Now() fmt.Println(now) // 2020-12-19 15:26:47.337952 +0800 CST m=+0.000669128 // 指定格式 timeNowStr := now.Format(timeFormatStr) fmt.Println(timeNowStr) // 2020-12-19T15:26:47+0800 // 固定格式 tiemNowStr2 := now.String() fmt.Println(tiemNowStr2) // 2020-12-19 15:26:47.337952 +0800 CST m=+0.000669128
时间戳转时间
使用 time.Unix 方法,注意 time.Unix 方法的第一个参数的单位是秒!如果传来的时间戳是毫秒级别的话,记得除以1000!
// 毫秒级别的时间戳 tiemStamp := 1608409607000 // 时间戳转时间 // 如果第一个参数是毫秒的话,需要除以1000转成秒!第二个参数是偏移,设置成0就行 ret := time.Unix(int64(tiemStamp / 1000), 0) fmt.Printf("ret: %v, %T ", ret, ret) // ret: 2020-12-20 04:26:47 +0800 CST, time.Time
获取time对象包含年/月/日/时/分/秒/周的一些方法
now := time.Now() // 当前时间对应的 年、月、日 year, month, day := now.Date() fmt.Println(fmt.Sprintf("year: %d, month: %d, day: %d ", year, month, day)) /* year: 2020, month: 12, day: 19 */ // 当前时间对应的是 时、分、秒 hour, minute, second := now.Clock() fmt.Println(fmt.Sprintf("hour: %d, minute: %d, second: %d ", hour, minute, second)) /* hour: 14, minute: 52, second: 31 */ // 当前时间是一周的周几 weekDay := now.Weekday() fmt.Println(weekDay) // Saturday
时间比较与运算相关
// 当地的时区 TIME_LOCATION_CST, _ := time.LoadLocation("Asia/Shanghai") now := time.Now() // 自己创造一个时间 createTime := time.Date(2019,02,23,10,22,33,0,TIME_LOCATION_CST) fmt.Println(now) fmt.Println(createTime) /* 2020-12-19 15:44:55.196377 +0800 CST m=+0.000776951 2019-02-23 10:22:33 +0800 CST */ // 比较两个时间是否相等 fmt.Println(now.Equal(createTime)) // false // now 是否在 createTime之前 fmt.Println(now.Before(createTime)) // false // now是否在 createTime之后 fmt.Println(now.After(createTime)) // true // --------------------------------------------------- // now 与 createTime 的时间差 timeDuration := now.Sub(createTime) fmt.Println("timeDuration>> ",timeDuration) // 15965h15m5.224671s // 时间差的小时数 fmt.Println(timeDuration.Hours()) // 15965.271575873056 // 时间差的分钟数 fmt.Println(timeDuration.Minutes()) // 957916.80486195 // 时间差的秒数 fmt.Println(timeDuration.Seconds()) // 5.7475023995509e+07 // 时间段用字符串表示 fmt.Printf("ret.String(): %v, %T ", timeDuration.String(), timeDuration.String()) /* ret.String(): 15965h18m48.126891s, string */ // 当前时间点 +1 天 (前面2个是年 月) tomorrow := now.AddDate(0,0,1) fmt.Println(tomorrow) // 2020-12-20 15:43:54.56172 +0800 CST // 当前时间 +Durations after := now.Add(100) fmt.Println(after) // 2020-12-19 15:44:55.1963771 +0800 CST m=+0.000777051
~~~