Golang 日期/时间包的使用详解
golang的日期时间包:time的使用方式。
- timepackage包含了time.Time时间对象及构建此时间对象的一些方法(time.Unix(),time.Parse())
- golang可精确到nanosecond,故相应的函数返回值或参数都已纳秒为单位,我们可以借助time.ParseDuration(durationStringstring)友好的生成纳秒度量的时间跨度值
- golang的时间格式串Layout固定为2006-01-0215:04:05
- golang默认使用Local即本地时区,可以通过time.LoadLocation(zoneNamestring)(*Location,error)来设定时区
时区构建/格式化模式串
//构建时区 vartimeLocation*time.Location timeLocation,_=time.LoadLocation("")//UTC timeLocation,_=time.LoadLocation("UTC")//UTC timeLocation,_=time.LoadLocation("Local")//Local timeLocation,_=time.LoadLocation("Asia/Shanghai")//使用时区码 //golang的时间格式化pattern vartimeLayout="2006-01-0215:04:05"
当前时间对象
//获取当前时间对象 vartimertime.Time timer=time.Now() //为时间设定时区可以通过timer.Local()/timer.UTC()快速设定时区 timer.In(timeLocation)
获取秒级时间戳/纳秒级时间戳
//获取当前秒级时间戳 varcurTimestampint64 curTimestamp=timer.Unix() println("currenttimestamp:"+strconv.FormatInt(curTimestamp,10)) //获取当前纳秒及时间戳1秒=1000毫秒=1000,000微妙=1000,000,000纳秒 varcurNanoTimestampint64 curNanoTimestamp=timer.UnixNano() println("currentnanotimestamp:"+strconv.FormatInt(curNanoTimestamp,10))
获取本地时间的时区/CST标准时间/自定义格式
//获取本地时间的时区/快速获取时区时间/自定义格式 timeZone,_:=timer.Zone() fmt.Printf("timezone:%s\n",timeZone) fmt.Printf("timelocation:%s\n",timer.Location()) fmt.Printf("timeinlocalzone:%s\n",timer.Local().String()) fmt.Printf("timeinutczone:%s\n",timer.UTC().String()) fmt.Printf("time:%s\n",timer.String()) fmt.Printf("timeformatted:%s\n",timer.Format("2006-01-0215:04:05"))
获取当前的年/月/日时:分:秒纳秒
//获取当前的年/月/日时:分:秒纳秒 fmt.Printf("currentyear:%d\n",timer.Year()) fmt.Printf("currentmonth:%d%s\n",timer.Month(),timer.Month())//返回的Month对象 fmt.Printf("currentday:%d\n",timer.Day()) fmt.Printf("currenthour:%d\n",timer.Hour()) fmt.Printf("currentminute:%d\n",timer.Minute()) fmt.Printf("currentsecond:%d\n",timer.Second()) fmt.Printf("currentnanosecond:%d\n",timer.Nanosecond())
获取当前时间/日期
//获取当前时间/日期 curHour,curMinute,curSecond:=timer.Clock() fmt.Printf("currentclock:%d:%02d:%02d\n",curHour,curMinute,curSecond) curYear,curMonth,curDay:=timer.Date() fmt.Printf("currentdate:%d-%02d-%02d\n",curYear,curMonth,curDay)
编辑时间/求两个日期的时间差
time.ParseDuration(durationStringstring)可以方便我们使用语义构建时间跨度值,数值单位为纳秒,比如:
timeDuration,_:=time.ParseDuration("24h")
timeDuration,_:=time.ParseDuration("12m")
timeDuration,_:=time.ParseDuration("6s")
timeDuration,_:=time.ParseDuration("1ms")
timeDuration,_:=time.ParseDuration("1us")
timeDuration,_:=time.ParseDuration("1ns")
//已当前时间为基增长年/月/日后的时间对象 timerAdded:=timer.AddDate(1,2,3) curYear,curMonth,curDay=timerAdded.Date() fmt.Printf("currentdate:%d-%02d-%02d\n",curYear,curMonth,curDay) //以当前时间为基增长N纳秒后的时间对象比如增长了一天 timeDuration,_:=time.ParseDuration("24h") timerAdded=timer.Add(timeDuration) //计算两个时间的差值返回的是纳秒按需求自行计算其他单位 //Durationistypeofint64andnanoseconds timeDuration=timerAdded.Sub(timer) fmt.Printf("daysdurationbetween%s~%s:%d\n", timerAdded.Format(timeLayout), timer.Format(timeLayout), timeDuration/1000/1000/1000/24/60/60)
使用时间字符串/UnixTimestamp构建时间对象
//使用时间串获取时间对象 timer,_=time.Parse(timeLayout,"2018-08-0808:08:08") //使用时间串获取时间对象并设定时区 timer,_=time.ParseInLocation(timeLayout,"2018-08-0808:08:08",timeLocation) //使用Unix时间戳构建时间对象 timer=time.Unix(1552368806,0)//2019-03-1213:33:26的Unix时间戳 fmt.Println(timer.Format(timeLayout))
获取当前时间是本年第几天本周第几天
注意周日的Weekday编号为0
//获取当前时间是本年第几天本周第几天 fmt.Printf("yearday:%d,weekday:%d\n",timer.YearDay(),timer.Weekday())
使用表征字符串转换时间跨度
//使用表征字符串转换时间跨度 timeDuration,_=time.ParseDuration("300s") fmt.Printf("nanosecond:%d\n",timeDuration) timeDuration,_=time.ParseDuration("300us") fmt.Printf("nanosecond:%d\n",timeDuration)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。