Golang 日期/时间包的使用详解
程序员文章站
2022-03-06 09:07:56
golang 的日期时间包:time 的使用方式。
time package 包含了 time.time 时间对象 及 构建此时间对象的一些方法(time.uni...
golang 的日期时间包:time 的使用方式。
- time package 包含了 time.time 时间对象 及 构建此时间对象的一些方法(time.unix(), time.parse())
- golang 可精确到 nanosecond,故相应的函数返回值或参数都已纳秒为单位,我们可以借助time.parseduration(durationstring string)友好的生成纳秒度量的时间跨度值
- golang 的时间格式串layout固定为 2006-01-02 15:04:05
- golang 默认使用 local 即本地时区,可以通过 time.loadlocation(zonename string) (*location, error)来设定时区
时区构建/格式化模式串
// 构建时区 var timelocation *time.location timelocation, _ = time.loadlocation("") //utc timelocation, _ = time.loadlocation("utc") //utc timelocation, _ = time.loadlocation("local") //local timelocation, _ = time.loadlocation("asia/shanghai") //使用时区码 //golang的时间格式化pattern var timelayout = "2006-01-02 15:04:05"
当前时间对象
// 获取当前时间对象 var timer time.time timer = time.now() // 为时间设定时区 可以通过 timer.local()/timer.utc() 快速设定时区 timer.in(timelocation)
获取秒级时间戳/纳秒级时间戳
// 获取当前秒级时间戳 var curtimestamp int64 curtimestamp = timer.unix() println("current timestamp:" + strconv.formatint(curtimestamp, 10)) // 获取当前纳秒及时间戳 1秒=1000毫秒=1000,000微妙=1000,000,000纳秒 var curnanotimestamp int64 curnanotimestamp = timer.unixnano() println("current nano timestamp:" + strconv.formatint(curnanotimestamp, 10))
获取本地时间的时区/cst标准时间/自定义格式
// 获取本地时间的时区/快速获取时区时间/自定义格式 timezone, _ := timer.zone() fmt.printf("time zone: %s\n", timezone) fmt.printf("time location: %s\n", timer.location()) fmt.printf("time in local zone: %s\n", timer.local().string()) fmt.printf("time in utc zone: %s\n", timer.utc().string()) fmt.printf("time: %s\n", timer.string()) fmt.printf("time formatted: %s\n", timer.format("2006-01-02 15:04:05"))
获取当前的年/月/日 时:分:秒 纳秒
// 获取当前的年/月/日 时:分:秒 纳秒 fmt.printf("current year: %d\n", timer.year()) fmt.printf("current month: %d %s\n", timer.month(), timer.month()) //返回的month对象 fmt.printf("current day: %d\n", timer.day()) fmt.printf("current hour: %d\n", timer.hour()) fmt.printf("current minute: %d\n", timer.minute()) fmt.printf("current second: %d\n", timer.second()) fmt.printf("current nanosecond: %d\n", timer.nanosecond())
获取当前时间/日期
// 获取当前时间/日期 curhour, curminute, cursecond := timer.clock() fmt.printf("current clock: %d:%02d:%02d\n", curhour, curminute, cursecond) curyear, curmonth, curday := timer.date() fmt.printf("current date: %d-%02d-%02d\n", curyear, curmonth, curday)
编辑时间/求两个日期的时间差
time.parseduration(durationstring string)可以方便我们使用语义构建时间跨度值,数值单位为纳秒,比如:
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("current date: %d-%02d-%02d\n", curyear, curmonth, curday) // 以当前时间为基增长n纳秒后的时间对象 比如增长了一天 timeduration, _ := time.parseduration("24h") timeradded = timer.add(timeduration) // 计算两个时间的差值 返回的是纳秒 按需求自行计算其他单位 // duration is type of int64 and nanoseconds timeduration = timeradded.sub(timer) fmt.printf("days duration between %s~%s: %d\n", timeradded.format(timelayout), timer.format(timelayout), timeduration/1000/1000/1000/24/60/60)
使用 时间字符串 / unix timestamp 构建时间对象
// 使用时间串获取时间对象 timer, _ = time.parse(timelayout, "2018-08-08 08:08:08") // 使用时间串获取时间对象 并设定时区 timer, _ = time.parseinlocation(timelayout, "2018-08-08 08:08:08", timelocation) // 使用unix时间戳构建时间对象 timer = time.unix(1552368806, 0) //2019-03-12 13:33:26的unix时间戳 fmt.println(timer.format(timelayout))
获取当前时间是本年第几天 本周第几天
注意周日 的 weekday编号为 0
// 获取当前时间是本年第几天 本周第几天 fmt.printf("year day: %d, week day: %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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 详解Golang 推荐的命名规范