23.2 时间-定时器、格式化时间

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

 

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值