period_test.go 1.6 KB

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