package tool import ( "crypto/md5" "encoding/hex" "fmt" "strconv" "strings" "time" ) const ( Layout = "2006-01-02 15:04:05" DateTime = "2006-01-02" DefaultExecTime = "0_0_0" ) // StringToTimeUnix 时间字符串转换成时间戳 // a.g 6_2_3 ===> 转换成 6天2小时3分钟后的时间戳 // TODO 需要优化代码写得太死,需要优化后兼容秒的场景 func StringToTimeUnix(execTimeStr string) int64 { var processAt = time.Now().Unix() if execTimeStr == DefaultExecTime { return processAt } execTime := strings.Split(execTimeStr, "_") if len(execTime) < 3 { return processAt } // 天数 days, _ := strconv.Atoi(execTime[0]) processAt += int64(days) * 24 * 60 * 60 // 小时 hours, _ := strconv.Atoi(execTime[1]) processAt += int64(hours) * 60 * 60 // 分钟 minutes, _ := strconv.Atoi(execTime[2]) processAt += int64(minutes) * 60 return processAt } func GetLocalTime(timeStr string) time.Time { execTime, _ := time.ParseInLocation(Layout, timeStr, time.Local) return execTime } // TimeParseLocalUnix 获取当天零点的时间戳 // eg 2023-02-22 => 1676995200 func TimeParseLocalUnix(DayTime string) int64 { value := DayTime if len(DayTime) <= 11 { value = fmt.Sprintf("%s 00:00:00", DayTime) } loc, _ := time.LoadLocation("Local") theTime, _ := time.ParseInLocation(Layout, value, loc) return theTime.Unix() } func Md5String(input string) string { s := md5.New() digest := strings.ReplaceAll(input, "\n", "") s.Write([]byte(digest)) return hex.EncodeToString(s.Sum(nil)) }