42
Golang 日期/时间包的使用
source link: https://studygolang.com/articles/18851?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK