当前时间前推或后退指定年、月、日、时、分、秒等

  1. // 今天向前推1年、2月、3天
  2. time.Now().AddDate(-1,-2,-3)
  3. // 今天向后推1年、2月、3天
  4. time.Now().AddDate(1,2,3)
  5. //当前时间前推1小时
  6. time.Now().Add(time.Duration(-1)*time.Hour)
  7. //当前时间后推1小时
  8. time.Now().Add(time.Duration(1)*time.Hour)

获取本周星期对应的日期

  1. //获取本周指定星期对应的日期 weekIndex 1:星期一 2:星期二 以此类推
  2. func getThisWeekDay(weekIndex int) string {
  3. week := make(map[string]int)
  4. week = map[string]int{
  5. "Monday": 1, "Tuesday": 2, "Wednesday": 3, "Thursday": 4, "Friday": 5, "Saturday": 6, "Sunday": 7,
  6. }
  7. day := weekIndex - week[time.Now().Weekday().String()]
  8. return time.Now().AddDate(0, 0, day).Format("2006-01-02")
  9. }
  10. //获取本周日日期
  11. getThisWeekDay(7)

时间戳转日期字符串

  1. //时间戳转日期字符串
  2. func timeStamp2Date(ts int64) string {
  3. return time.Unix(ts, 0).Format("2006-01-02 15:04:05")
  4. }
  5. timeStamp2Date(time.Now().Unix())

时间字符串转时间

  1. //时间字符串转时间类型
  2. func timeStr2Time(timestr string) time.Time {
  3. tm := "2006-01-02"
  4. if strings.Count(timestr, "") > 11 {
  5. tm = "2006-01-02 15:04:05"
  6. }
  7. t, _ := time.Parse(tm, timestr)
  8. return t
  9. }
  10. timeStr2Time("2020-05-05")
  11. timeStr2Time("2020-05-05 15:03:05")

获取当天对应的星期

  1. //获取当前时间是星期几
  2. func getThisWeekDay() string {
  3. var week map[string]string
  4. week = map[string]string{
  5. "Monday": "星期一", "Tuesday": "星期二", "Wednesday": "星期三", "Thursday": "星期四", "Friday": "星期五", "Saturday": "星期六", "Sunday": "星期日",
  6. }
  7. return week[time.Now().Weekday().String()]
  8. }

纳秒 毫秒 秒

  1. //10位数的时间戳是以 秒 为单位;
  2. //13位数的时间戳是以 毫秒 为单位;
  3. //19位数的时间戳是以 纳秒 为单位;
  4. // 获取秒
  5. time.Now().Unix()
  6. // 获取纳秒
  7. time.Now().UnixNano()
  8. // 获取毫秒(纳秒转毫秒)
  9. time.Now().UnixNano() / 1e6
  10. // 纳秒转秒
  11. time.Now().UnixNano() / 1e9
  12. //秒转时间格式
  13. time.Unix(time.Now().Unix(), 0)
  14. //纳秒转时间格式
  15. time.Unix(0,time.Now().UnixNano())

设置时区(中国)

  1. //在windows系统上,没有安装go语言环境的情况下,time.LoadLocation会加载失败。
  2. var sh, _ = time.LoadLocation("Asia/Shanghai")
  3. time.Now().In(sh).Format("2006-01-02 15:04:05")
  4. //time.FixedZone各个系统都能很好的设置时区
  5. time.Now().In(time.FixedZone("CST", 8*3600)).Format("2006-01-02 15:04:05"))

time 时间的加减法

Add方法 Add用于计算某个时间之前和之后的时间点

  1. //h -- > 时
  2. //m -- > 分
  3. //s -- > 秒
  4. //ms -- > 毫秒
  5. //us -- > 纳秒
  6. //µs -- > 纳秒
  7. //ns -- > 微秒
  8. //10分钟前的时间
  9. m, _ := time.ParseDuration("-10m")
  10. mT := now.Add(m)
  11. //10分钟后的时间
  12. m, _ := time.ParseDuration("10m")
  13. mT := now.Add(m)

Sub方法 用于计算两个时间差

  1. now:=time.Now()
  2. m, _ := time.ParseDuration("-10m")
  3. mT := time.Now().Add(m)
  4. now.Sub(mT).String()

time 比较时间大小

  1. time1 := "2019-05-20 18:30:50"
  2. time2 := "2019-05-20 17:30:50"
  3. t1, _ := time.Parse("2006-01-02 15:04:05", time1)
  4. t2, _ := time.Parse("2006-01-02 15:04:05", time2)
  5. //t1的时间是否早于t2
  6. t1.Before(t2)
  7. //t1的时间是否晚于t2
  8. t1.After(t2)
  9. //t1的时间是否与t2相等
  10. t1.Equal(t2)

timer三种定时器方式

  1. // (A)
  2. time.AfterFunc(5 * time.Minute, func() {
  3. fmt.Printf("expired")
  4. }
  5. // (B) create a Timer object
  6. timer := time.NewTimer(5 * time.Minute)
  7. <-timer.C
  8. fmt.Printf("expired")
  9. // (C) time.After() returns timer.C internally
  10. <-time.After(5 * time.Minute)
  11. fmt.Printf("expired")