详解Golang中的各种时间操作
#代码知识 发布时间: 2026-01-12
需求

时间格式的转换比较麻烦,自己写了个工具,可以通过工具中的这些方法相互调用转成自己想要的格式,代码如下,后续有新的函数再添加
实现代码
package utils
import "time"
const (
TIMEFORMAT = "20060102150405"
NORMALTIMEFORMAT = "2006-01-02 15:04:05"
)
// 当前时间
func GetTime() time.Time{
return time.Now()
}
// 格式化为:20060102150405
func GetTimeString(t time.Time) string {
return t.Format(TIMEFORMAT)
}
// 格式化为:2006-01-02 15:04:05
func GetNormalTimeString(t time.Time) string {
return t.Format(NORMALTIMEFORMAT)
}
// 转为时间戳->秒数
func GetTimeUnix(t time.Time) int64 {
return t.Unix()
}
// 转为时间戳->毫秒数
func GetTimeMills(t time.Time) int64 {
return t.UnixNano() / 1e6
}
// 时间戳转时间
func GetTimeByInt(t1 int64) time.Time{
return time.Unix(t1,0)
}
// 字符串转时间
func GetTimeByString(timestring string) (time.Time,error){
if timestring == "" {
return time.Time{},nil
}
return time.ParseInLocation(TIMEFORMAT, timestring, time.Local)
}
// 标准字符串转时间
func GetTimeByNormalString(timestring string) (time.Time,error){
if timestring == "" {
return time.Time{},nil
}
return time.ParseInLocation(NORMALTIMEFORMAT, timestring, time.Local)
}
// 比较两个时间大小
func CompareTime(t1 ,t2 time.Time) bool {
return t1.Before(t2)
}
// n小时后的时间字符串
func GetNextHourTime(s string, n int64) string {
t2, _ := time.ParseInLocation(TIMEFORMAT, s, time.Local)
t1 := t2.Add(time.Hour * time.Duration(n))
return GetTimeString(t1)
}
// 计算俩个时间差多少小时
func GetHourDiffer(start_time, end_time string) float32 {
var hour float32
t1, err := time.ParseInLocation(TIMEFORMAT, start_time, time.Local)
t2, err := time.ParseInLocation(TIMEFORMAT, end_time, time.Local)
if err == nil && CompareTime(t1,t2) {
diff := GetTimeUnix(t2) - GetTimeUnix(t1)
hour = float32(diff) / 3600
return hour
}
return hour
}
// 判断当前时间是否是整点
func Checkhours() bool {
_, m, s := GetTime().Clock()
if m == s && m == 0 && s == 0 {
return true
}
return false
}
// 时间字符串转为标准字符串
func StringToNormalString(t string) string {
if !(len(TIMEFORMAT) == len(t) || len(SHORTTIMESTRING) == len(t)) {
return t
}
if len(SHORTTIMESTRING) == len(t) {
t += "000000"
}
if len(TIMEFORMAT) == len(t) {
t1,err:= GetTimeByString(t)
if err != nil {
return t
}
t = GetTimeString(t1)
}
return t
}
判断一个时间点是否在一个时间点之后
过程:这个对于时间戳而言非常简单,但是对于其他的需要转换到time即可对比
stringToTime, _ := time.Parse("2006-01-02 15:04:05", "2017-12-12 12:00:00")
beforeOrAfter := stringToTime.After(time.Now())
if beforeOrAfter == true {
fmt.Println("2017-12-12 12:00:00在tNow之后!")
} else {
fmt.Println("2017-12-12 12:00:00在tNow之前!")
}
判断一个时间相比另外一个时间点过去了多久
过程:这个是用Time的方式来对比
beginTime :=time.Now()
time.Sleep(time.Second*1)
durtime:= time.Since(beginTime)
fmt.Println("离现在过去了:",durtime)
到此这篇关于详解Golang中的各种时间操作的文章就介绍到这了,更多相关Golang 时间操作内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇 : vue将文件/图片批量打包下载zip的教程
下一篇 : golang 两个go程轮流打印一个切片的实现
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!