文章来源:http://gf.johng.cn/494387通用时间管理模块封装了常用的时间/日期相关方法。它还支持自定义日期格式化语法,类似于PHP的日期语法。使用方法:import"gitee.com/johng/gf/g/os/gtime"方法列表:godoc.org/github.com/johng-cn/gf/g/os/gtimegtime模块最大的特点是支持自定义时间格式,参考PHP日期时间格式语法,下面是支持的时间格式语法列表:时间对象方法列表:typeTimefuncNew(t...time.Time)*TimefuncNewFromStr(strstring)*TimefuncNewFromStrFormat(strstring,formatstring)*TimefuncNewFromStrLayout(strstring,layoutstring)*TimefuncNewFromTime(ttime.Time)*TimefuncNewFromTimeStamp(timestampint64)*TimefuncNow()*Timefunc(t*Time)Add(dtime.Duration)*Timefunc(t*Time)AddDate(yearsint,monthsint,daysint)*Timefunc(t*Time)克隆()*Timefunc(t*Time)Format(格式字符串)stringfunc(t*Time)Layout(布局字符串)stringfunc(t*Time)Local()*Timefunc(t*Time)Microsecond()int64func(t*Time)Millisecond()int64func(t*Time)Nanosecond()int64func(t*Time)Round(dtime.Duration)*Timefunc(t*Time)Second()int64func(t*Time)String()字符串func(t*Time)ToLocation(location*time.Location)*Timefunc(t*Time)ToTime()time.Timefunc(t*Time)Truncate(dtime.Duration)*Timefunc(t*Time)UTC时间()*Time通过标准库time.Time对象创建gtime.Time对象,Unix时间戳,时间字符串(如:2018-07-1812:01:00),自定义时间字符串(需要给定格式,支持自定义格式和标准库格式)示例一、自定义时间格式语法包mainimport("fmt""gitee.com/johng/gf/g/os/gtime")funcmain(){formats:=[]string{"Y-m-dH:i:s.u","DMdH:i:sTOY","\\T\\i\\m\\e\\i\\s:h:i:sa","2006-01-02T15:04:05.000000000Z07:00",}t:=gtime.Now()for_,f:=rangeformats{fmt.Println(t.Format(f))}}在例子中,我们给出了四种格式,将当前时间用这四种格式转换后打印出来。执行后输出如下:2018-07-2211:17:13.797SunJul2211:17:13CST+08002018Timeis:11:17:13am2006-01-02CST15:04:05.000000000Z07:00可以查看现在,这个例子演示了几个需要注意的点:如果使用的字母与格式化字符冲突,可以使用\符号来移位字符,这样时间格式解析器会认为该字符不是格式化字符字符,而是一个普通的字母。所以这里第三个字符串例子的输出是:Timeis:11:17:13am使用Format方法接收自定义时间格式语法(如:Y-m-dH:i:s),不是标准库事件格式语法(如:2006-01-0215:04:05),两种语法不能混用,所以这里第四个字符串例子中的参数值按原样输出;例2、标准库时间格式语法包mainimport("fmt""gitee.com/johng/gf/g/os/gtime")funcmain(){formats:=[]string{"2006-01-0215:04:05.000","MonJan_215:04:05MST2006","Timeis:03:04:05PM","2006-01-02T15:04:05.000000000Z07:00MST",}t:=gtime.Now()for_,f:=rangeformats{fmt.Println(t.Layout(f))}}在此示例中,我们使用四种标准库时间格式化语法来格式化当前时间并将结果输出到终端。执行后输出为:2018-07-2211:28:13.945SunJul2211:28:13CST2018时间为:11:28:13AM2018-07-22T11:28:13.945153275+08:00CST根除以这个为例,有几点需要说明:自定义时间格式化语法与标准库时间格式化语法不冲突,前者使用Format方法,后者使用Layout语法进行格式化,各自独立其他,互不冲突,不能混用;标准库的时间格式化语法有自己的特点,是不是感觉有点复杂;例3、时间对象链操作包mainimport("fmt""gitee.com/johng/gf/g/os/gtime""time")funcmain(){//去年今天fmt.Println(gtime.Now().AddDate(-1,0,0).Format("Y-m-d"))//去年今天,UTC时间fmt.Println(gtime.Now().AddDate(-1,0,0).Format("Y-m-dH:i:sT"))fmt.Println(gtime.Now().AddDate(-1,0,0).UTC().Format("Y-m-dH:i:sT"))//0下个月1号上午:00fmt.Println(gtime.Now().AddDate(0,1,0).Format("Y-m-d00:00:00"))//执行后fmt.Println(gtime.Now().Add(-time.Hour).Format("Y-m-dH:i:s"))}2小时前,输出结果为:2017-07-222017-07-2211:42:36CST2017-07-2203:42:36UTC2018-08-2200:00:002018-07-2210:42:36这个例子比较简单,就不详细介绍了。工具方法godoc.org/github.com/johng-cn/gf/g/os/gtimefuncDate()stringfuncDatetime()stringfuncMicrosecond()int64funcMillisecond()int64funcNanosecond()int64funcSecond()int64funcSetInterval(ttime.持续时间,回调func()bool)funcSetTimeZone(zonestring)errorfuncSetTimeout(ttime.Duration,callbackfunc())funcStrToTime(strstring)(time.Time,error)funcStrToTimeFormat(strstring,formatstring)(time.Time,error)funcStrToTimeLayout(strstring,layoutstring)(time.Time,error)方法比较简单,常用的方法如下;Second用于获取当前时间戳,Millisecond、Microsecond和Nanosecond用于获取当前的毫秒值、微秒值和纳秒值;Date和Datetime用于获取当前日期和当前日期时间;SetTimeZone用于设置当前进程的全球时区;其他方法说明请参考接口文档;简单示例:packagemainimport("fmt""gitee.com/johng/gf/g/os/gtime")funcmain(){fmt.Println("Date:",gtime.Date())fmt.Println("日期时间:",gtime.Datetime())fmt.Println("秒:",gtime.Second())fmt.Println("毫秒:",gtime.Millisecond())fmt.Println("微秒:",gtime.Microsecond())fmt.Println("Nanosecond:",gtime.Nanosecond())}执行后,输出结果为:Date:2018-07-22Datetime:2018-07-2211:52:22Second:1532231542毫秒:1532231542688微秒:1532231542688688纳秒:1532231542688690259
