1、星期:type Weekday int

const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)

(1)func (d Weekday) String() string  

返回星期几的英文名。

2、月份:type Month int

const (
January Month = 1 + iota
February
March
April
May
June
July
August
September
October
November
December
)

(1)func (m Month) String() string

返回月份英文名。  

3、时间点:type Time struct{...}

(1)Time代表一个纳秒精度的时间点。

(2)func Now() Time

返回当前本地时间。

(3)func (t Time) Equal(u Time) bool

判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较。

本方法和用t==u不同,这种方法还会比较地点和时区信息。

(4)func (t Time) Before(u Time) bool

如果t代表的时间点在u之前,返回真;否则返回假。

(5)func (t Time) After(u Time) bool

如果t代表的时间点在u之后,返回真;否则返回假。

(6)func (t Time) Date() (year int, month Month, day int)

返回时间点t对应的年、月、日。

(7)func (t Time) Clock() (hour, min, sec int)

返回t对应的那一天的时、分、秒。

(8)func (t Time) Year() int

返回时间点t对应的年份。

(9)func (t Time) Month() Month

返回时间点t对应那一年的第几月。

(10)func (t Time) Day() int

返回时间点t对应那一月的第几日。

(11)func (t Time) Hour() int

返回t对应的那一天的第几小时,范围[0, 23]。

(12)func (t Time) Minute() int

返回t对应的那一小时的第几分种,范围[0, 59]。

(13)func (t Time) Second() int

返回t对应的那一分钟的第几秒,范围[0, 59]。

(14)func (t Time) Nanosecond() int

返回t对应的那一秒内的纳秒偏移量,范围[0, 999999999]。

(15)func (t Time) YearDay() int

返回时间点t对应的那一年的第几天,平年的返回值范围[1,365],闰年[1,366]。

(16)func (t Time) Weekday() Weekday

返回时间点t对应的那一周的周几。

(17)func (t Time) Add(d Duration) Time

Add返回时间点t+d。

(18)func (t Time) AddDate(years int, months int, days int) Time

AddDate返回增加了给出的年份、月份和天数的时间点Time。

(19)func (t Time) Sub(u Time) Duration

返回一个时间段t-u。如果结果超出了Duration可以表示的最大值/最小值,将返回最大值/最小值。

要获取时间点t-d(d为Duration),可以使用t.Add(-d)。

(20)func (t Time) Format(layout string) string

Format根据layout指定的格式返回t代表的时间点的格式化文本表示。

(21)func (t Time) String() string

返回采用"2006-01-02 15:04:05.999999999 -0700 MST"格式字符串的格式化时间。

4、纳秒:type Duration int64

(1)两个时间点之间经过的时间,以纳秒为单位。

const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)

(2)func ParseDuration(s string) (Duration, error)

ParseDuration解析一个时间段字符串。

一个时间段字符串是一个序列,每个片段包含可选的正负号、十进制数、可选的小数部分和单位后缀,如"300ms"、"-1.5h"、"2h45m"。

合法的单位有"ns"、"us" /"µs"、"ms"、"s"、"m"、"h"。 

(3)func Since(t Time) Duration

Since返回从t到现在经过的时间,等价于time.Now().Sub(t)。

(4)func (d Duration) Hours() float64

Hours将时间段表示为float64类型的小时数。

(5)func (d Duration) Minutes() float64

Hours将时间段表示为float64类型的分钟数。

(6)func (d Duration) Seconds() float64

Hours将时间段表示为float64类型的秒数。

(7)func (d Duration) Nanoseconds() int64

Hours将时间段表示为int64类型的纳秒数,等价于int64(d)。

(8)func (d Duration) String() string

返回时间段采用"72h3m0.5s"格式的字符串表示。 

package main

import (
"fmt"
"time"
) func main() {
//时间操作
now := time.Now()
fmt.Println(now)
fmt.Println(now.Date())
fmt.Println(now.Clock())
fmt.Printf("%d/%d/%d %d:%d:%d\n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
fmt.Println(now.Format("2006/01/02 03:04:05"))
fmt.Println(now.Format("2006/01/02 15:04:05"))
newTime := now.Add(time.Hour)
fmt.Println(now.Format("2006/01/02 15:04:05"), newTime.Format("2006/01/02 15:04:05"))
dur := newTime.Sub(now)
fmt.Println(dur)
//输出
// 2019-06-15 22:16:39.6012388 +0800 CST m=+0.002032901
// 2019 June 15
// 22 16 39
// 2019/6/15 22:16:39
// 2019/06/15 10:16:39
// 2019/06/15 22:16:39
// 2019/06/15 22:16:39 2019/06/15 23:16:39
// 1h0m0s
}

5、定时器:type Timer struct{...}

(1)Timer类型代表单次时间事件。

当Timer到期时,当时的时间会被发送给C <-chan Time,除非Timer是被AfterFunc函数创建的。

(2)func NewTimer(d Duration) *Timer

NewTimer创建一个Timer,它会在最少过去时间段d后到期,向其自身的C字段发送当时的时间。

(3)func AfterFunc(d Duration, f func()) *Timer

AfterFunc另起一个go程等待时间段d过去,然后调用f。

它返回一个Timer,可以通过调用其Stop方法来取消等待和对f的调用。

(4)func (t *Timer) Reset(d Duration) bool

Reset使t重新开始计时,(本方法返回后再)等待时间段d过去后到期。

如果调用时t还在等待中会返回真;如果t已经到期或者被停止了会返回假。

(5)func (t *Timer) Stop() bool

Stop停止Timer的执行。

如果停止了t会返回真;如果t已经被停止或者过期了会返回假。

Stop不会关闭通道t.C,以避免从该通道的读取不正确的成功。

package main

import (
"fmt"
"math/rand"
"time"
) func main() {
//1、定时器一秒后
t1 := time.Now()
timer := time.NewTimer(time.Second)
t2 := <-timer.C
dur := t2.Sub(t1)
fmt.Println(dur)
//2、定时器一秒后输出
time.AfterFunc(time.Second, func() {
fmt.Println("one second")
})
time.Sleep(time.Second * 2)
// 3、测试(运行结果根据随机数而定)
rand.Seed(time.Now().UnixNano())
timer = time.AfterFunc(time.Second, func() {
fmt.Println("do test")
})
for {
n := rand.Intn(3)
if n == 0 {
break
} else {
fmt.Println("Reset", n)
timer.Reset(time.Second * time.Duration(n))
}
}
time.Sleep(time.Second * 1)
fmt.Println(timer.Stop())
}

6、定时器:type Ticker struct{...}

(1)Ticker保管一个通道,并每隔一段时间向其传递"tick"。

(2)func NewTicker(d Duration) *Ticker

NewTicker返回一个新的Ticker,该Ticker包含一个通道字段,并会每隔时间段d就向该通道发送当时的时间。

它会调整时间间隔或者丢弃tick信息以适应反应慢的接收者。如果d<=0会panic。关闭该Ticker可以释放相关资源。

(3)func (t *Ticker) Stop()

Stop关闭一个Ticker。在关闭后,将不会发送更多的tick信息。

Stop不会关闭通道t.C,以避免从该通道的读取不正确的成功。

package main

import (
"fmt"
"time"
) func main() {
timer := time.NewTimer(time.Second * 5)
ticker := time.NewTicker(time.Second * 1)
for {
select {
case <-timer.C:
fmt.Println("timer 执行一次结束")
case <-ticker.C:
fmt.Println("ticker 每隔一段时间执行一次")
}
}
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// timer 执行一次结束
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
// ticker 每隔一段时间执行一次
//...
}

7、其他

(1)func Sleep(d Duration)

Sleep阻塞当前go程至少d代表的时间段。d<=0时,Sleep会立刻返回。

(2)func After(d Duration) <-chan Time

After会在另一线程经过时间段d后向返回值发送当时的时间。等价于NewTimer(d).C。

(3)func Tick(d Duration) <-chan Time

Tick是NewTicker的封装,只提供对Ticker的通道的访问。如果不需要关闭Ticker,本函数就很方便。

goalng——time包学习的更多相关文章

  1. R语言爬虫初尝试-基于RVEST包学习

    注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...

  2. java.util.concurrent包学习笔记(一)Executor框架

    类图: 其实从类图我们能发现concurrent包(除去java.util.concurrent.atomic 和 java.util.concurrent.locks)中的内容并没有特别多,大概分为 ...

  3. sklearn包学习

    1首先是sklearn的官网:http://scikit-learn.org/stable/ 在官网网址上可以看到很多的demo,下边这张是一张非常有用的流程图,在这个流程图中,可以根据数据集的特征, ...

  4. Go中sync包学习

    前面刚讲到goroutine和channel,通过goroutine启动一个协程,通过channel的方式在多个goroutine中传递消息来保证并发安全.今天我们来学习sync包,这个包是Go提供的 ...

  5. pandas包学习笔记

    目录 zip Importing & exporting data Plotting with pandas Visual exploratory data analysis 折线图 散点图 ...

  6. R parallel包学习笔记2

    这个部分我在datacamp上面学习笔记,可视化的性能很差,使用的函数也很少. 可以参考一下大佬的博客园个人感觉他们讲的真的很详细 https://cosx.org/2016/09/r-and-par ...

  7. PHP的zip压缩工具扩展包学习

    总算到了 PHP 的拿手好戏上场了,前面我们学习过 Bzip2 . LZF . Phar 和 rar 这些压缩相关扩展在 PHP 中的使用,不过它们要么是太冷门,要么就是很多功能不支持.而 Zip 则 ...

  8. Fiddler抓包学习

    今天看到一个抓包笔记, 因为是老早抓包的需求, 后期不用就忘了, 换电脑桌面软件图标都没了, 点开看了一下一脸懵逼... 这是啥...  以后有需要在看一遍吧! Fiddler抓包使用教程-扫盲篇 h ...

  9. DBMS_OUTPUT包学习

    DBMS_OUTPUT包中的其他方法和函数的用法,所以这次特地来研究一下. 先简单的讲解一下这个包的所有procedure的含义及作用:  -----------------------     1. ...

随机推荐

  1. hihoCoder#1069 最近公共祖先·三

    原题地址 根据提示用Spase Table做 将Tree先展成List,因为数组长度等于边数的2倍,树中边数等于节点数-1,所以List数组只要开2倍节点数大小即可 WA了几次,原来是查询的时候出现左 ...

  2. codevs3728 联合权值

    题目描述 Description 输入描述 Input Description 输出描述 Output Description 样例输入 Sample Input 样例输出 Sample Output ...

  3. Java高并发实战,锁的优化

    锁优化 这里的锁优化主要是指 JVM 对 synchronized 的优化. 自旋锁 互斥同步进入阻塞状态的开销都很大,应该尽量避免.在许多应用中,共享数据的锁定状态只会持续很短的一段时间.自旋锁的思 ...

  4. MongoDB学习day02--数据库增删改查

    (window系统,在cmd命令提示符中使用) 一.数据库使用 管理mongodb数据库:mongo,连接本地数据库,或mongo 127.0.0.1:27017,连接其他服务器:mongo  ip: ...

  5. Linux 网络配置,ifconfig不显示ip地址的解决办法

    进入到/etc/sysconfig/network-scripts 然后设置虚拟机的网络配置 这样就配置成功了

  6. Mac 系统引导过程概述 & BootCamp 的秘密

    http://bbs.feng.com/read-htm-tid-6890655.html

  7. 百度语音识别API初探

    近期想做个东西把大段对话转成文字.用语音输入法太慢,所以想到看有没有现成的API,网上一搜,基本就是百度和讯飞. 这里先看百度的 笔者使用的是Java版本号的 下载地址:http://bos.nj.b ...

  8. Windows Server2008 R2 设置NAT 让Hyper-V连接Internet

    1.添加虚拟网卡,设置为内部,并且固定IP地址192.168.1.1 255.255.255.0 此为内网网卡 2.添加服务器角色:DHCP服务器,DNS服务器,网络策略和访问服务 3."网 ...

  9. Struts2.3动态调用报 No result defined for action 错误

    struts 2.3.16  採用动态调用发现不工作报404 not found,网上查找原因: 1.由于:struts2中默认不同意使用DMI 所以:须要在配置文件里打开: <constant ...

  10. Tomcat启动一半闪退问题解决

    近期刚刚接触Tomcat.对其还不是非常了解. 在这几天,遇到一个Tomcat启动闪退的问题.通过查阅各种资料.算是完美解决.在此分享给朋友们. 首先.确定你的问题在哪里.有两个方法,你能够通过日志去 ...