Go语言中Time的用法[1]
Time中定义的时间格式化常量:
const ( 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" // RFC822 with numeric zone 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" // RFC1123 with numeric zone RFC3339 = "2006-01-02T15:04:05Z07:00" RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" Kitchen = "3:04PM" // Handy time stamps. 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" ) |
这些常量是在time包中进行time格式化和time解析而预定义的一些常量,它们实际上都是同一个时间:
Mon Jan 2 15:04:05 MST 2006
换算成Unix时间为1136239445,MST时间是GMT-0700(UTC -07:00),上面定义时间可以被理解为下面这个格式:
01/02 03:04:05PM '06-0700 (注:01对应Month,02对应Day,03对应Hour,04对应Minute,05对应Second,06对应四位Year的后两位)
可以模仿上面的格式定义一个自己的时间输出格式:
layout := "Year:2006 Month:01 Day:02 Hour:03 Min:04 Second:05" fmt.Println(time.Now().Format(layout)) |
输出:
Year:2017 Month:02 Day:16 Hour:05 Min:04 Second:36 |
也可以使用前面常量中定义的格式来格式化Time:
fmt.Println(time.Now().Format(time.RFC1123)) |
After函数:
定义:func After(d Duration) <-chan Time (返回值是一个单向channel)
After接受一个time.Duration参数,等待参数指定的时间后,返回一个类型为Time的channel,并向这个channel中发送一个当前时间的Time对象。
示例(利用After来设定等待超时时间):
fmt.Println(time.Now()) c := make(chan int) go func() { time.Sleep(time.Second * 10) c <- 1 } () select { case x := <- c: fmt.Println("Received", x) case t := <- time.After(time.Second * 5): fmt.Println("Timeout at", t) } |
Sleep函数:
定义:func Sleep(d Duration)
Sleep方法根据传入的time.Duration参数阻塞当前goroutine,如果传入0或者负值,则直接返回。
Tick函数:
定义:func Tick(dDuration) <-chan Time
Tick方法接受一个time.Duration参数,返回一个Timechannel,并且每隔一段时间(参数Duration定义的时间)会向该channel中传入一个当前时间的Time对象。当传入的参数d <= 0的时候,Tick会返回nil。
示例:
c := time.Tick(time.Second * 5) fmt.Println(time.Now()) func() { for i := 0; i < 3; i++ { select { case t := <- c: fmt.Println(t) } } } () |
Duration类型:
一个Duration类型变量代表了2个int64类型的纳秒(nanosecond)的差值(所以它本身也是int64类型),最大的Duration不能超过290年。
常量定义:
const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute ) |
可以通过乘法得到Duration:
var d Duration d = time.Second * 5 // 5 seconds |
ParseDuration函数:
定义:func ParseDuration(sstring) (Duration, error)
ParseDuration方法接受一个string参数,该string参数为一个由有符号的十进制数字与时间单位的组成的字符串,例如“300ms”,"-1.5h"或者"2h45m",有效的时间单位有:"ns","us"("µs"),"ms","s","m","h"
Since函数:
定义:func Since(t Time)Duration
该方法返回自参数t到现在一共经过的时间,等价于time.Now().Sub(t)
Duration的Hours方法:
定义:func (d Duration) Hours()float64
返回一个Duration结构对应的小时数(即将Duration换算成小时的值)
Duration的Minutes方法:
定义:func (dDuration) Minutes() float64
返回一个Duration结构对应的分钟数(即将Duration换算成分钟的值)
Duration的Nanoseconds方法:
定义:func (dDuration) Nanoseconds() int64
返回一个Duration结构对应的纳秒数(即将Duration换算成纳秒的值,注意这里的返回值是整形)
Duration的Seconds方法:
定义:func (dDuration) Seconds() float64
返回一个Duration结构对应的秒数(即将Duration换算成秒的值)
Duration的String方法:
定义:func (d Duration)String() string
该方法为ParseDuration的逆运算,用于将一个Duration转换为一个类似于"72h3m5s"这种格式的字符串
Location类型:
Location代表时区,主要用于计算时间的偏移量
FixedZone函数:
定义:funcFixedZone(name string, offset int) *Location
该方法根据参数中给定的时区名称以及偏移值(从UTC时区向东经过的秒数)返回一个Locaiton对象
LoadLocation函数:
定义:funcLoadLocation(name string) (*Location, error)
该方法根据参数指定的时区名称返回一个Location对象,例如"UTC"返回UTC Location,"Local"返回本地时区
Location的String方法:
定义:func (l*Location) String() string
返回一个参数Location对应的时区的描述性名称
Month类型:
Month有关的常量定义:
const ( January Month = 1 + iota February March April May June July August September October November December ) |
Month的String方法:
定义:func (m Month)String() string
返回"January","February"….这些代表月份的字符串
ParseError类型:
ParseError结构定义了将一个string解析成Time对象时的错误
type ParseError struct { Layout string Value string LayoutElem string ValueElem string Message string } |
ParseError的Error方法:
定义:func (e*ParseError) Error() string
该方法返回一个代表该ParseError的字符串
Ticker类型:
Ticker类型包含了一个用于时钟轮询的channel
type Ticker struct { C <-chan Time // The channel on which the ticks are delivered. // contains filtered or unexported fields } |
NewTicker函数:
定义:func NewTicker(dDuration) *Ticker
该方法返回一个包含一个channel的Ticker对象,根据传入的Duration参数,该channel中会每隔对应的时间放入一个代表当前时间的Time对象,参数d必须大于0,否则该函数会Panic。Stop方法会释放掉相关资源。
Ticker的Stop方法:
定义:func (t *Ticker)Stop()
刚方法停止一个Ticker,当停止后,对应的channel中不再产生新的Time对象,但是该方法不会关闭对应的channel,以防止从该channel中读取Time对象的操作会错误的结束
Ticker的示例:
tk := time.NewTicker(time.Second) for i := 0; i < 10; i++ { select { case t := <- tk.C: fmt.Println(t) } } tk.Stop() |
Go语言中Time的用法[1]相关推荐
- c语言中getche的用法,c语言中getch的用法
[www.hywsbj.com--图表展板] getch()函数是无回显的从控制台取得一个字符.以利用getch()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,即任意键继续效果.下面小编 ...
- php indexof的用法,c语言中indexof的用法有哪些
c语言中indexof的用法有哪些 index在互联网上表示网站的默认主页.一般为 index.html index.htmindex.aspindex.php:另外的默认主页也多用default.h ...
- c语言中point的用法_关于C语言Switch语句,先学这些技巧够不够?
一.C语言中switch的用法 1.switch后面括弧内的[表达式],ANSI标准允许它为任何类型: 2.当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,否则,就 ...
- c语言中size of 用法,C语言中sizeof()的用法
要参加软件研发的笔试(C/C++)几乎都会涉及到sizeof()的用法,我昨天也遇到了,有的也会,但是真正sizeof()的核心还是没有领会,今天上网,无聊中就看到了详细的sizeof()的阐述,现在 ...
- C语言中const的用法
C语言中const的用法 基本解释 const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解co ...
- sql 语言中 when case 用法
sql语言中有没有相似C语言中的switch case的语句?? 没有,用case when 来取代就行了. 比如,以下的语句显示中文年月 select getdate() as 日期,case mo ...
- c语言中switch的用法是什么?
c语言中switch的用法是: 功能:switch语句是多分支选择语句.用来实现多分支选择结构.if语句只有两个分支可供选择,而实际问题中常常要用到多分支的选择.例如,学生成绩分类(90为" ...
- #define c# 报错_c语言中#define的用法
c语言中#define的用法 C语言中,可以用 #define 定义一个标识符来表示一个常量.其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译 ...
- getch方法_c语言中getch的用法
1 c 语言中 getch 的用法 getch() 函数是无回显的从控制台取得一个字符. 以利用 getch() 函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面 , 即 任意键继续效果.下面 ...
- C语言中delay的用法
转自:微点阅读 https://www.weidianyuedu.com C语言作为一门新型高级编程语言,在计算机软件编程中具有较为广泛的应用和实现.下面微点阅读小编就跟你们详细介绍下c语言中del ...
最新文章
- 程序员请不要问“在吗?”
- linux redhat 下命令行全部乱码解决
- C++ error:LNK2005 已经在*.obj中定义
- Windows UI风格的设计(11)
- 如何将mysql文件导入MySQL_如何将mysql5的sql文件导入到mysql4?
- Numpy数组的广播机制
- MapXtreme 2005新增内容
- py程序员写代码的习惯养成 防止想到什么写什么
- bootstrap-multiselect.js如何动态更新select里的数据
- ORACLE HANDBOOK系列之十:字符集、编码以及Oracle的那些事
- setsockopt用法详解
- Python 修改图片的时候抗锯齿
- Linux卸载驱动方法
- Ubuntu安装过程之磁盘分区图文教程
- 关于井冈山大学校园宽带WIFI多人共享解决的一些思路
- java后台实现支付宝支付接口、支付宝订单查询接口 前端为APP
- 张小龙回应一切!2019微信公开课一人撑到半夜,4小时演讲3万字实录
- html如何快速转pDF,如何快速实现pdf转html网页文件 高能方法帮你解决80%职场难题...
- 计算机方面经典书籍一
- 计算机网络——虚拟机网络的三种模式介绍-桥接模式-NAT模式-仅主机模式