goalng——time包学习
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包学习的更多相关文章
- R语言爬虫初尝试-基于RVEST包学习
		
注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...
 - java.util.concurrent包学习笔记(一)Executor框架
		
类图: 其实从类图我们能发现concurrent包(除去java.util.concurrent.atomic 和 java.util.concurrent.locks)中的内容并没有特别多,大概分为 ...
 - sklearn包学习
		
1首先是sklearn的官网:http://scikit-learn.org/stable/ 在官网网址上可以看到很多的demo,下边这张是一张非常有用的流程图,在这个流程图中,可以根据数据集的特征, ...
 - Go中sync包学习
		
前面刚讲到goroutine和channel,通过goroutine启动一个协程,通过channel的方式在多个goroutine中传递消息来保证并发安全.今天我们来学习sync包,这个包是Go提供的 ...
 - pandas包学习笔记
		
目录 zip Importing & exporting data Plotting with pandas Visual exploratory data analysis 折线图 散点图 ...
 - R parallel包学习笔记2
		
这个部分我在datacamp上面学习笔记,可视化的性能很差,使用的函数也很少. 可以参考一下大佬的博客园个人感觉他们讲的真的很详细 https://cosx.org/2016/09/r-and-par ...
 - PHP的zip压缩工具扩展包学习
		
总算到了 PHP 的拿手好戏上场了,前面我们学习过 Bzip2 . LZF . Phar 和 rar 这些压缩相关扩展在 PHP 中的使用,不过它们要么是太冷门,要么就是很多功能不支持.而 Zip 则 ...
 - Fiddler抓包学习
		
今天看到一个抓包笔记, 因为是老早抓包的需求, 后期不用就忘了, 换电脑桌面软件图标都没了, 点开看了一下一脸懵逼... 这是啥... 以后有需要在看一遍吧! Fiddler抓包使用教程-扫盲篇 h ...
 - DBMS_OUTPUT包学习
		
DBMS_OUTPUT包中的其他方法和函数的用法,所以这次特地来研究一下. 先简单的讲解一下这个包的所有procedure的含义及作用: ----------------------- 1. ...
 
随机推荐
- Leetcode 188.买卖股票的最佳时机IV
			
买卖股票的最佳时机IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必 ...
 - 九度oj 题目1063:整数和
			
题目1063:整数和 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4043 解决:2638 题目描述: 编写程序,读入一个整数N.若N为非负数,则计算N到2N之间的整数和:若N为一个负数 ...
 - 全文搜索(AC-1)-互联网信息过载问题
			
什么是信息过载? 信息检索技术是什么? 信息过滤技术是什么?
 - HDU 4941
			
Magical Forest Problem Description There is a forest can be seen as N * M grid. In this forest, ther ...
 - 玛丽卡(codevs 1021)
			
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
 - [NOIP2004] 普及组
			
不高兴的津津 纯模拟 #include<cmath> #include<cstdio> #include<iostream> using namespace std ...
 - codeforces 691D(数据结构)
			
D. Swaps in Permutation time limit per test 5 seconds memory limit per test 256 megabytes input stan ...
 - [bzoj3879]SvT_后缀数组_RMQ_单调栈
			
SvT bzoj-3879 题目大意:给定一个字符串.每次询问给定$t$个位置,求两两位置开头的后缀的$LCP$之和. 注释:$1\le length\le 5\cdot 10^5$,$\sum t\ ...
 - 何时、怎样开启 MySql 日志?
			
假如你是一名 web 开发者.假设你想调试你的应用或提升其性能的话,那你须要去參考各种日志文件.日志是開始故障排除最好的选择.就著名的 MySql 数据库server而言,你须要參考下面日志文件: 错 ...
 - 神马都是浮云,unity中自己写Coroutine协程源代码
			
孙广东 2014.7.19 无意之间看到了,Unity维基上的一篇文章, 是关于自己写协程的介绍. 认为非常好,这样能更好的了解到协程的执行机制等特性.还是不错的. 原文链接地址例如以下: ht ...