场景
类似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("时间错误")
}