欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。