golang 时间编程

golang 时间编程,第1张

概述     编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。     golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。     第一个是UNIX epoch time,确切的说就是自

编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。

golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。

第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s

golang中一个很重要的表征时间的数据类型是Time,基本就是三个成员变量 sec ,nsec,Location,详细意思可以参看注释。

typeTimestruct{//secgivesthenumberofsecondselapsedsince//January1,year100:00:00UTC.secint64//nsecspecifIEsanon-negativenanosecond//offsetwithinthesecondnamedbySeconds.//Itmustbeintherange[0,999999999].nsecint32//locspecifIEstheLocationthatshouldbeusedto//determinetheminute,hour,month,day,andyear//thatcorrespondtothisTime.//OnlythezeroTimehasanilLocation.//InthatcaseitisinterpretedtomeanUTC.loc*Location}

OK,如何取到UNIX epoch time.

Now:=time.Now()

用time package中Now()函数获取到当前的时间信息,Now()函数非常的重要,他是后面一切转换的起始点。从Now()我们获取到了Time,从Time类型我们从容的获取到UNIX epoch time,自然获取到year ,month ,day,weekday,minute,second,nanosecond.

获取UNIX epoch time:

varepoch_secondsint64=Now.Unix()

获取Year

func(tTime)Year()intcur_year:=Now.Year()

获取Month

func(tTime)Month()Monthcur_month:=Now.Month()ifcur_month==time.November{...}

Month是int类型,fmt.Printf("%v") 或者fmt.Println可以打印出November来,同时Month type有String()函数,输出“November”这样的字符串

const(JanuaryMonth=1+iotaFebruarymarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember)

year mon day,这些都可以在Date函数中一并返回:

func(tTime)Date()(yearint,monthMonth,dayint)year,mon,day=Now.Date()

获取Hour

func(tTime)Hour()intcur_hour:=Now.Hour()

Minute可以通过Minute()返回,second可以通过Second()返回。

time还提供了Clock()的同时返回 hour,second = Now.Clock().

packagemainimport"fmt"import"time"funcmain(){Now:=time.Now()year,day:=Now.UTC().Date()hour,min,sec:=Now.UTC().Clock()zone,_:=Now.UTC().Zone()fmt.Printf("UTCtimeis%d-%d-%d%02d:%02d:%02d%s\n",year,sec,zone)year,day=Now.Date()hour,sec=Now.Clock()zone,_=Now.Zone()fmt.Printf("localtimeis%d-%d-%d%02d:%02d:%02d%s\n",zone)}
go版本的输出---------------------UTCtimeis2013-11-2215:51:22UTClocaltimeis2013-11-2223:51:22CST

我们另一个关心的话题,是时间间隔,比如我们profile一个以非常耗时的function,我们会在函数开始前记下时刻值,函数结束后,再次记录下时刻值,然后两者的差值,就是函数运行时间。

这表明Time是可以相减的

start_time:=time.Now()expensive_functionend_time:=time.Now()vardurationDuration=end_time.Sub(start_time)

Duration是一种数据类型,其实是个int64类型,表征的是两个时刻之间的纳秒数。

typeDurationint64const(NanosecondDuration=1Microsecond=1000*NanosecondMillisecond=1000*MicrosecondSecond=1000*MillisecondMinute=60*SecondHour=60*Minute)

Duration类型有Minutes()/Second()/Nanoseconds(),将duration折算成分钟/秒/纳秒。

Now:=time.Now()time.Sleep(3*time.Second);end_time:=time.Now()vardur_timetime.Duration=end_time.Sub(Now)varelapsed_minfloat64=dur_time.Minutes()varelapsed_secfloat64=dur_time.Seconds()varelapsed_nanoint64=dur_time.Nanoseconds()fmt.Printf("elasped%fminutesor\nelapsed%fsecondsor\nelapsed%dnanoseconds\n",elapsed_min,elapsed_sec,elapsed_nano)

输出如下

elasped0.050005minutesorelapsed3.000292secondsorelapsed3000292435nanoseconds

Go中的time.Sleep一律是以纳秒为单位的,当然本质是Duration类型:

sleep 3秒可以写成

time.Sleep(3000000000)
time.Sleep(3*time.Second);


packagemainimport("fmt""time")const(date="2006-01-02"shortdate="06-01-02"times="15:04:02"shorttime="15:04"datetime="2006-01-0215:04:02"newdatetime="2006/01/0215~04~02"newtime="15~04~02")funcmain(){thisdate:="2014-03-1714:55:06"timeformatdate,_:=time.Parse(datetime,thisdate)fmt.Println(timeformatdate)convdate:=timeformatdate.Format(date)convshortdate:=timeformatdate.Format(shortdate)convtime:=timeformatdate.Format(times)convshorttime:=timeformatdate.Format(shorttime)convnewdatetime:=timeformatdate.Format(newdatetime)convnewtime:=timeformatdate.Format(newtime)fmt.Println(convdate)fmt.Println(convshortdate)fmt.Println(convtime)fmt.Println(convshorttime)fmt.Println(convnewdatetime)fmt.Println(convnewtime)}
总结

以上是内存溢出为你收集整理的golang 时间编程全部内容,希望文章能够帮你解决golang 时间编程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1287018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存