Golang时间的相关操作

golang中时间相关操作,主要是用time包的函数,time中最主要又包含了time.Time这个对象。

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
}

获取当前时间

func getNow() {
    // 获取当前时间,返回time.Time对象
    fmt.Println(time.Now())
    // output: 2016-07-27 08:57:46.53277327 +0800 CST
    // 其中CST可视为美国,澳大利亚,古巴或中国的标准时间
    // +0800表示比UTC时间快8个小时
    // 获取当前时间戳
    fmt.Println(time.Now().Unix())
    // 精确到纳秒,通过纳秒就可以计算出毫秒和微妙
    fmt.Println(time.Now().UnixNano()
    // output:
    //    1469581066
    //    1469581438172080471
}

格式化时间显示

func formatUnixTime() {
    // 获取当前时间,进行格式化
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    // output: 2016-07-27 08:57:46
    // 指定的时间进行格式化
    fmt.Println(time.Unix(1469579899, 0).Format("2006-01-02 15:04:05"))
    // output: 2016-07-27 08:38:19
}
// 格式化为:20060102150405
func GetTimeString(t time.Time) string {
	return t.Format(20060102150405)
}

获取指定时间戳的年份

func getYear() {
    // 获取指定时间戳的年月日,小时分钟秒
    t := time.Unix(1469579899, 0)
    fmt.Printf("%d-%d-%d %d:%d:%d\n", t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
    // output: 2016-7-27 8:38:19
}

时间字符串转换时间戳

// 将2016-07-27 08:46:15这样的时间字符串转换时间戳
func strToUnix() {
    // 先用time.Parse对时间字符串进行分析,如果正确会得到一个time.Time对象
    // 后面就可以用time.Time对象的函数Unix进行获取
    t2, err := time.Parse("2006-01-02 15:04:05", "2016-07-27 08:46:15")
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(t2)
    fmt.Println(t2.Unix())
    // output:
    //     2016-07-27 08:46:15 +0000 UTC
    //     1469609175
}

根据时间戳获取当日开始的时间戳

// 根据时间戳获取当日开始的时间戳
// 这个在统计功能中会常常用到
// 方法就是通过时间戳取到2016-01-01 00:00:00这样的时间格式
// 然后再转成时间戳就OK了
// 获取月开始时间和年开始时间类似
func getDayStartUnix() {
    t := time.Unix(1469581066, 0).Format("2006-01-02")
    sts, err := time.Parse("2006-01-02", t)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(sts.Unix())
    // output: 1469577600
}

休眠

// 休眠
func sleep() {
    // 休眠1秒
    // time.Millisecond    表示1毫秒
    // time.Microsecond    表示1微妙
    // time.Nanosecond    表示1纳秒
    time.Sleep(1 * time.Second)
    // 休眠100毫秒
    time.Sleep(100 * time.Millisecond)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值