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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。