package test import ( "fmt" "testing" "time" ) /*周期记录时间测试 1、2、5、6、10、10、15、20、30、60 */ func TestPeriodw(t *testing.T) { // 基准时间 baseTime, _ := time.Parse("2006-01-02 15:04:05", "2017-03-13 13:20:45") // 输入的时间列表 inputTimes := []string{ "2017-03-13 13:20:45", "2017-03-13 13:24:45", "2024-04-14 13:26:10", "2024-04-15 13:29:59", "2023-04-11 13:30:10", "2023-05-11 13:33:23", "2023-05-11 13:39:38", "2023-05-11 13:41:23", "2023-05-11 13:43:34", "2023-05-11 13:54:30", "2023-05-11 13:50:00", "2023-05-11 13:51:00", } // 设置时间间隔(分钟) interval := 2 // 遍历输入时间并转换 for _, inputTimeStr := range inputTimes { inputTime, _ := time.Parse("2006-01-02 15:04:05", inputTimeStr) transformedTime := ConvertTime(baseTime, inputTime, interval) fmt.Printf("%s 转换为 %s\n", inputTimeStr, transformedTime.Format("2006-01-02 15:04:05")) } } // ConvertTime 根据基准时间和间隔将输入时间转换为指定格式 func ConvertTime(baseTime time.Time, inputTime time.Time, intervalMinutes int) time.Time { // 计算输入时间距离基准时间的总分钟数 minutesDiff := int(inputTime.Sub(baseTime).Minutes()) // 计算离基准时间最近的间隔 if minutesDiff < 0 { // 如果输入时间早于基准时间,返回基准时间 return baseTime } // 计算最近的间隔 closestInterval := (minutesDiff / intervalMinutes) * intervalMinutes // 返回基准时间加上最近的间隔 return baseTime.Add(time.Duration(closestInterval) * time.Minute) }