go 快速获取时间,快速转换时间

场景

类似PHP时间类型,能够灵活转化,快速获取各种时间,字符串与时间转换

支持常见时间类型

1:yyyy-MM-dd

2:yyyy-MM-dd HH:mm:ss

3:yyyy/MM/dd

4:yyyy/MM/dd HH:mm:ss

5:yyyyMMdd

6:yyyyMMddHHmmss

main.go


package main

import "toolTime"

func main() {

/**
 * @Description: 测试数据
 */
//func TestDem() {
//	var date = []string{
//		"2006-11-22 23:54:12",
//		"2006-11-22",
//		"2006/11/22 23:54:12",
//		"2006/11/22",
//		"20061122",
//		"20061122235412",
//	}
//	for _, v := range date {
//		num := GetIntByString(v)
//		fmt.Println("原来数据", v)
//		fmt.Println(num)
//		fmt.Println(GetStringByUnix(num, DateTypeOneYMD))
//		fmt.Println(GetStringByUnix(num, DateTypeOneYMDHIS))
//		fmt.Println(GetStringByUnix(num, DateTypeTwoYMD))
//		fmt.Println(GetStringByUnix(num, DateTypeTwoYMDHIS))
//		fmt.Println(GetStringByUnix(num, DateTypeThreeYMD))
//		fmt.Println(GetStringByUnix(num, DateTypeFourYMDHIS))
//		fmt.Println()
//	}
//}

	// 结果
	//原来数据 20061122235412
	//1164210852
	//2006-11-22
	//2006-11-22 23:54:12
	//2006/11/22
	//2006/11/22 23:54:12
	//20061122
	//20061122235412
	
	toolTime.TestDem()



	return
}
    

toolTime.go

package toolTime

import (
	"fmt"
	"log"
	"time"
)
    // 时间模板类型
    const (
    	templateOneYMD     = "2006-01-02"
    	templateOneYMDHIS  = "2006-01-02 15:04:05"
    	templateTwoYMD     = "2006/01/02"
    	templateTwoYMDHIS  = "2006/01/02 15:04:05"
    	templateThreeYMD   = "20060102"
    	templateFourYMDHIS = "20060102150405"
    )
    
    /**
     * @Description: 返回时间格式类型
     */
    var (
    	DateTypeOneYMD     = dateType("yyyy-MM-dd")
    	DateTypeOneYMDHIS  = dateType("yyyy-MM-dd HH:mm:ss")
    	DateTypeTwoYMD     = dateType("yyyy/MM/dd")
    	DateTypeTwoYMDHIS  = dateType("yyyy/MM/dd HH:mm:ss")
    	DateTypeThreeYMD   = dateType("yyyyMMdd")
    	DateTypeFourYMDHIS = dateType("yyyyMMddHHmmss")
    )
    
    type dateType string
    
    /**
     * @Description: 返回格式与时间模板
     */
    var typeToTemplate = map[dateType]string{
    	DateTypeOneYMD:     templateOneYMD,
    	DateTypeOneYMDHIS:  templateOneYMDHIS,
    	DateTypeTwoYMD:     templateTwoYMD,
    	DateTypeTwoYMDHIS:  templateTwoYMDHIS,
    	DateTypeThreeYMD:   templateThreeYMD,
    	DateTypeFourYMDHIS: templateFourYMDHIS,
    }
    
    
    /**
     * @Description: 通过字符串时间获取时间戳
     * @param date
     * @return int
     */
    func GetIntByString(date string) int {
    	templateRet, err := getTimeTemplate(date)
    	if err != nil {
    		log.Println("时间解析正则表达式错误", err)
    		return 0
    	}
    	tm, _ := time.ParseInLocation(templateRet, date, time.Local)
    	return int(tm.Unix())
    }
    
    /**
     * @Description: 转化日期类型
     * @param date
     * @param dateType
     * @return string
     */
    func GetStrChangeByStr(date string, dateType dateType) string {
    	templateRet, err := getTimeTemplate(date)
    	if err != nil {
    		log.Println("时间解析正则表达式错误", err)
    		return ""
    	}
    	theTime, _ := time.ParseInLocation(templateRet, date, time.Local)
    	return theTime.Format(typeToTemplate[dateType])
    }
    
    /**
     * @Description: 通过时间戳与返回时间类型获取数据
     * @param unix
     * @param dateType
     * @return string
     */
    func GetStringByUnix(unix int, dateType dateType) string {
    	return time.Unix(int64(unix), 0).Format(typeToTemplate[dateType])
    }
    
    /**
     * @Description: 获取今天时间
     * @param dateType
     * @return string
     */
    func GetStrToday(dateType dateType) string {
    	return time.Now().Format(typeToTemplate[dateType])
    }
    
    func GetIntToday() int {
    
    	return 0
    }
    
    /**
     * @Description: 获取明天日期
     * @param dateType
     * @return string
     */
    func GetStrTomorrow(dateType dateType) string {
    	todayUnix := time.Now().Unix()
    	todayUnix += 24 * 60 * 60
    	return GetStringByUnix(int(todayUnix), dateType)
    }
    
    /**
     * @Description: 获取指定日期时间
     * @param num
     * @param dateType
     * @return string
     */
    func GetStrFixDay(num int,dateType dateType) string {
    	todayUnix := time.Now().Unix()
    	todayUnix += 24 * 60 * 60 * int64(num)
    	return GetStringByUnix(int(todayUnix), dateType)
    }
    
    
    func TestDem() {
    	var date = []string{
    		"2006-11-22 23:54:12",
    		"2006-11-22",
    		"2006/11/22 23:54:12",
    		"2006/11/22",
    		"20061122",
    		"20061122235412",
    	}
    	for _, v := range date {
    		num := GetIntByString(v)
    		fmt.Println("原来数据", v)
    		fmt.Println(num)
    		fmt.Println(GetStringByUnix(num, DateTypeOneYMD))
    		fmt.Println(GetStringByUnix(num, DateTypeOneYMDHIS))
    		fmt.Println(GetStringByUnix(num, DateTypeTwoYMD))
    		fmt.Println(GetStringByUnix(num, DateTypeTwoYMDHIS))
    		fmt.Println(GetStringByUnix(num, DateTypeThreeYMD))
    		fmt.Println(GetStringByUnix(num, DateTypeFourYMDHIS))
    		fmt.Println()
    	}
    }

toolTime.go


package toolTime

import (
	"errors"
	"regexp"
)

var (
	regexpPatter = map[string]string{
		templateOneYMD:     `(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$`,
		templateOneYMDHIS:  `((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$`,
		templateTwoYMD:     `(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})\/(((0[13578]|1[02])\/(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)\/(0[1-9]|[12][0-9]|30))|(02\/(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))\/02\/29)$`,
		templateTwoYMDHIS:  `((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})\/(((0[13578]|1[02])\/(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)\/(0[1-9]|[12][0-9]|30))|(02\/(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))\/02\/29))\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$`,
		templateThreeYMD:   `(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)$`,
		templateFourYMDHIS: `((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1][0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$`,
	}
)

/**
 * @Description: 获取时间模板类型
 * @param date
 * @return string
 */
func getTimeTemplate(date string) (templateRet string, err error) {

	for template, patter := range regexpPatter {
		exist, err := regexp.Match(patter, []byte(date))
		if err != nil {
			return "", err
		}
		if exist {
			// 注:正则无法判断 templateThreeYMD templateFourYMDHIS 类型
			if len(date) != len(template) {
				continue
			}
			return template, err
		}
	}
	return "", errors.New("时间错误")
}

    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值