Time

PPG007 ... 2021-12-26 About 1 min

# Time

# 时间戳

时间戳是从 1970.1.1 到当前时间的毫秒数。

// 获取时间戳:
now := time.Now()
timestamp1 := now.Unix()
timestamp2 := now.UnixNano()
// 将时间戳转换为时间格式:
func ConvertTimestampToDate(timestamp int64, nsec int64) {
  t := time.Unix(timestamp, nsec)
  fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
}
1
2
3
4
5
6
7
8
9

# 时间间隔

时间间隔 time.Duration 是一个 time 包下的类型,代表两个时间点之间经过的时间,以纳秒为单位。

time.Duration.Hours()
1

# 时间操作

// 相加
fmt.Println(t1.Add(time.Hour))
// 求差
fmt.Println(t2.Sub(t1))
// 判断是否相等
fmt.Println(t1.Equal(t2))
// 判断是否在前
fmt.Println(t1.Before(t2))
// 判断是否在后
fmt.Println(t2.After(t1))
1
2
3
4
5
6
7
8
9
10

# 定时器

Ticker:每隔一段时间执行。

t := time.NewTicker(time.Second * 1)
n := int(0)
for range t.C {
  n++
  if n == 10 {
    t.Stop()
    break
  }
  fmt.Println(n)
}
1
2
3
4
5
6
7
8
9
10

Timer:时间到了只执行一次。

t := time.NewTimer(5 * time.Second)
fmt.Println(<- t.C)
// 重置定时器
t.Reset(3 * time.Second)

// 或者
<-time.After(time.Second * 2)
1
2
3
4
5
6
7

# 时间格式化

将 Time 转为日期字符串:

Go 语言中格式化字符串使用的是 Go 语言的诞生时间 2006 年 1 月 2 号 15 点 04 分,如果希望使用 12 小时制要指明 PM。

fmt.Println(t.Format("2006-01-02 3:04:05 PM Mon Jan"))
fmt.Println(t.Format("2006-01-02 15:04:05"))
fmt.Println(t.Format("2006.01.02 15:04"))
1
2
3

解析字符串格式的事件:

// 使用时区:
func ParseTime() {
  l, err := time.LoadLocation("Asia/Shanghai")
  if err != nil {
    fmt.Println(err)
    return
  }
  t, err := time.ParseInLocation("2006-01-02 3:04:05 PM Mon Jan", "2021-11-12 4:31:03 PM Fri Nov", l)

  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(t)
}
// 不使用时区:
func ParseTime() {
  t, err := time.Parse("2006.01.02 15:04", "2021.11.12 16:31")
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(t)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Last update: December 26, 2021 03:54
Contributors: PPG007