package util import ( "fmt" "strconv" "strings" "time" ) /* 时间常量 */ const ( //定义每分钟的秒数 SecondsPerMinute int64 = 60 //定义每小时的秒数 SecondsPerHour int64 = SecondsPerMinute * 60 //定义每天的秒数 SecondsPerDay int64 = SecondsPerHour * 24 LayoutDateFormat = "2006-01-02" ) /* 时间转换函数 */ func resolveTime(seconds int64) (day int64, hour int64, minute int64) { //每分钟秒数 minute = seconds / SecondsPerMinute //每小时秒数 hour = seconds / SecondsPerHour //每天秒数 day = seconds / SecondsPerDay return } func TimeTransformation(unix int64) string { _, hour, _ := resolveTime(unix) now := "" if hour < 10 { now = fmt.Sprintf("0%d", hour) } else { now = fmt.Sprintf("%d", hour) } minute := (unix - (hour * SecondsPerHour)) / 60 fmt.Println(minute, (hour * SecondsPerHour)) if minute < 10 { now = fmt.Sprintf("%s:0%d", now, minute) } else { now = fmt.Sprintf("%s:%d", now, minute) } seconds := unix - (hour*SecondsPerHour + SecondsPerMinute*minute) if seconds < 10 { now = fmt.Sprintf("%s:0%d", now, seconds) } else { now = fmt.Sprintf("%s:%d", now, seconds) } return now } // TimeBetween 获取指定时间范围内天数 // eg startTime => "2023-06-01" endTime => "2023-06-03" // return ["2023-06-01","2023-06-02","2023-06-03"] func TimeBetween(startTime, endTime string) []string { startDate, _ := time.ParseInLocation(LayoutDateFormat, startTime, time.Local) endDate, _ := time.ParseInLocation(LayoutDateFormat, endTime, time.Local) timeList := make([]string, 0) for endDate.After(startDate) { timeList = append(timeList, startDate.Format(LayoutDateFormat)) startDate = startDate.AddDate(0, 0, 1) } timeList = append(timeList, endTime) return timeList } // TimeParseToMinutes 时间转换成分钟 // durationStr := "00:02:30" => 150 func TimeParseToMinutes(timeStr string) int { durationSlice := strings.Split(timeStr, ":") if len(durationSlice) < 3 { return 0 } s1, _ := strconv.Atoi(durationSlice[0]) s2, _ := strconv.Atoi(durationSlice[1]) s3, _ := strconv.Atoi(durationSlice[2]) newDurationStr := fmt.Sprintf("%dh%dm%ds", s1, s2, s3) duration, err := time.ParseDuration(newDurationStr) if err != nil { fmt.Println("无法解析时间间隔:", err) return 0 } return int(duration.Seconds()) } // Median 获取切片的中位值 func Median(nums []int) float64 { n := len(nums) if n%2 == 0 { return float64(nums[n/2-1]+nums[n/2]) / float64(2) } else { return float64(nums[n/2]) } }