Golang中的时间与日期处理技巧
时间和日期处理在编程中是非常常见的操作,Golang中也提供了许多方便的库和方法来处理时间和日期。本文将介绍一些使用Golang中的时间和日期处理的技巧,希望可以帮助读者更好地了解和掌握Golang的时间和日期处理。
一、获取当前时间
在Golang中获取当前时间非常简单,只需要使用time包中的Now()方法即可。Now()方法返回当前时间的time.Time类型,代码示例如下:
```
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now)
}
```
输出结果如下:
```
2021-08-23 11:02:21.70164 +0800 CST m=+0.000295360
```
其中,时间格式为“年-月-日 时:分:秒.纳秒 时区”,m=+0.000295360表示当前时间相对于程序启动时间的相对时间。
二、格式化时间
Golang中可以使用time包提供的Format()方法对时间进行格式化操作。Format()方法接收一个字符串类型的时间格式,然后返回一个字符串类型的时间。下面是一些常见的时间格式:
```
time.RFC3339 // "2006-01-02T15:04:05Z07:00"
time.RFC1123 // "Mon, 02 Jan 2006 15:04:05 MST"
"2006-01-02 15:04:05"
"2006/01/02 15:04:05"
```
代码示例如下:
```
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Format(time.RFC3339)) // 2021-08-23T11:13:44+08:00
fmt.Println(now.Format("2006-01-02 15:04:05"))
fmt.Println(now.Format("2006/01/02 15:04:05"))
}
```
输出结果如下:
```
2021-08-23T11:13:44+08:00
2021-08-23 11:13:44
2021/08/23 11:13:44
```
三、时间戳操作
时间戳是将日期和时间表示为从Unix纪元(1970年1月1日00:00:00 UTC)开始经过的秒数。在Golang中,可以使用Unix()和UnixNano()方法来获取时间戳和纳秒级时间戳。代码示例如下:
```
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
timestamp := now.Unix()
nanosecond := now.UnixNano()
fmt.Println(timestamp) // 1629698790
fmt.Println(nanosecond) // 1629698790604263100
}
```
如果已知一个时间戳,可以使用time.Unix()方法将其转换为时间类型。代码示例如下:
```
package main
import (
"fmt"
"time"
)
func main() {
timestamp := 1629698790
t := time.Unix(int64(timestamp), 0)
fmt.Println(t.Format("2006-01-02 15:04:05"))
}
```
输出结果如下:
```
2021-08-23 11:26:30
```
四、日期加减操作
在Golang中,可以使用Add()方法来对日期进行加减操作。Add()方法接收一个Duration类型的参数,可以是正数或负数。Duration类型是一个表示时间长度的类型,可以使用time包中的Duration常量来表示,代码示例如下:
```
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
tomorrow := now.Add(time.Hour * 24)
fmt.Println(tomorrow.Format("2006-01-02 15:04:05"))
yesterday := now.Add(-time.Hour * 24)
fmt.Println(yesterday.Format("2006-01-02 15:04:05"))
}
```
输出结果如下:
```
2021-08-24 11:36:59
2021-08-22 11:36:59
```
五、定时器
在Golang中,可以使用time包中的Ticker和Timer类型来实现定时器。Ticker会重复触发定时器,而Timer只会触发一次。代码示例如下:
```
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(2 * time.Second)
for {
select {
case <-ticker.C:
fmt.Println("Ticker:", time.Now().Format("2006-01-02 15:04:05"))
}
}
}
```
输出结果如下:
```
Ticker: 2021-08-23 11:45:02
Ticker: 2021-08-23 11:45:04
Ticker: 2021-08-23 11:45:06
Ticker: 2021-08-23 11:45:08
...
```
```
package main
import (
"fmt"
"time"
)
func main() {
timer := time.NewTimer(3 * time.Second)
<-timer.C
fmt.Println("Timer:", time.Now().Format("2006-01-02 15:04:05"))
}
```
输出结果如下:
```
Timer: 2021-08-23 11:51:04
```
以上就是Golang中的时间和日期处理技巧,通过本文的介绍,相信读者对Golang中的时间和日期处理已经有了更深入的了解和掌握。