1. 定时器
time包的Tick函数会开启一个子线程,同时向父线程返回一个定时器通道。
- 子线程周期性地向定时器通道发送Time类型的数据,其周期间隔由参数指定。
- 父线程通过循环迭代定时器通道,周期性地执行特定操作。
基于循环的定时器操作。
- for t := range time.Tick(time.Second) { // 每隔1秒钟迭代一次
- fmt.Printf("\r%v", t.Format("02 Jan 2006 15:04:05"))
- }
// 定时器
// time包的Tick函数返回一个通道,该通道每间隔一个特定的周期被写入一次时间消息
package main
import (
"fmt"
"time"
)
func main() {
for t := range time.Tick(time.Second) {
fmt.Printf("\r%v", t.Format("02 Jan 2006 15:04:05"))
}
}
// 打印输出:
30 Dec 2018 15:07:06
2. 格式化时间
将时间表示为字符串可以采用多种格式,以下是Go语言支持的格式标准:
标准 | 格式 |
ANSIC(美国国家标准时间) | Mon Jan _2 15:04:05 2006 |
UnixDate(Unix系统常用格式) | Mon Jan _2 15:04:05 MST 2006 |
RubyDate(Ruby语言格式) | Mon Jan 02 15:04:05 -0700 2006 |
RFC822 | 02 Jan 06 15:04 MST |
RFC822Z | 02 Jan 06 15:04 -0700 |
RFC850 | Monday, 02-Jan-06 15:04:05 MST |
RFC1123 | Mon, 02 Jan 2006 15:04:05 MST |
RFC1123Z | Mon, 02 Jan 2006 15:04:05 -0700 |
RFC3339 | 2006-01-02T15:04:05Z07:00 |
RFC3339Nano | 2006-01-02T15:04:05.999999999Z07:00 |
Kitchen | 3:04PM |
Stamp | Jan _2 15:04:05 |
Go语言使用time包的导出类型Time表示时间,该类型的Format方法可根据参数指定的格式,将时间格式化为字符串。
用格式化标准整型常量作参数调用Format方法——标准格式化。
- fmt.Println(t.Format(time.ANSIC))
- Mon Feb 10 11:34:54 2020
用自定义格式化字符串作参数调用Format方法——自由格式化。
- fmt.Println(t.Format("02 Jan 2006 15:04:05"))
- 10 Feb 2020 11:34:54
Go语言通过下面的格式标记来描述各个时间元素的格式。Go语言支持对下述时间元素进行独立化的时间格式控制。
时间元素 | 格式标记 | |||
年 | 2006/06 | |||
月 | January/Jan/01/1 | |||
日 | 02/_2/2 | |||
星期 | Monday/Mon | |||
上下午 | PM/pm | |||
时区名 | MST | |||
时区 | Z07:00:00/Z07:00 | Z070000/Z0700 | Z07 | |
-07:00:00/-07:00 | -070000/-0700 | -07 | ||
时 | 15(24小时制) | 03/3(12小时制) | ||
分 | 04/4 | |||
秒 | 05/5 | |||
小数秒 | .0/.00/.000/...(含尾零) | .9/.99/.999/...(不含尾零) |
// 格式化时间
// Go支持如下时间格式标准:
// +-------------+-------------------------------------+
// | STANDARD | FORMAT |
// +-------------+-------------------------------------+
// | ANSIC | Mon Jan _2 15:04:05 2006 |
// | UnixDate | Mon Jan _2 15:04:05 MST 2006 |
// | RubyDate | Mon Jan 02 15:04:05 -0700 2006 |
// | RFC822 | 02 Jan 06 15:04 MST |
// | RFC822Z | 02 Jan 06 15:04 -0700 |
// | RFC850 | Monday, 02-Jan-06 15:04:05 MST |
// | RFC1123 | Mon, 02 Jan 2006 15:04:05 MST |
// | RFC1123Z | Mon, 02 Jan 2006 15:04:05 -0700 |
// | RFC3339 | 2006-01-02T15:04:05Z07:00 |
// | RFC3339Nano | 2006-01-02T15:04:05.999999999Z07:00 |
// | Kitchen | 3:04PM |
// | Stamp | Jan _2 15:04:05 |
// | StampMilli | Jan _2 15:04:05.000 |
// | StampMicro | Jan _2 15:04:05.000000 |
// | StampNano | Jan _2 15:04:05.000000000 |
// +-------------+-------------------------------------+
package main
import (
"fmt"
"log"
"time"
)
func main() {
t, err := time.Parse( // 按指定格式解析时间
time.RFC3339, "2020-02-10T11:34:54+08:00")
if err != nil {
log.Fatal(err)
}
fmt.Println(t)
fmt.Println(t.Format(time.ANSIC))
}
// 打印输出:
2020-02-10 11:34:54 +0800 CST
Mon Feb 10 11:34:54 2020