timestamp.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package util
  2. // 时间戳评估,对于时间戳不规范的情况,需要纠正,使得时间戳自增,相对合理
  3. // 定义一个全局结构来存储状态
  4. type TimestampProcessor struct {
  5. baseTimestamp int
  6. lastTimestamp int
  7. normalTotalTime int
  8. averageInterval int
  9. normalCount int
  10. }
  11. // 处理单个时间戳的函数
  12. func (p *TimestampProcessor) ProcessTimestamp(timestamp int) int {
  13. if p.normalCount == 0 {
  14. // 处理第一个时间戳
  15. p.baseTimestamp = timestamp
  16. p.lastTimestamp = timestamp
  17. p.normalCount = 1
  18. return timestamp
  19. }
  20. delta := timestamp - p.lastTimestamp
  21. // 计算当前间隔
  22. currentInterval := Conditoinal(delta > 0, delta, -delta)
  23. // 判断是否为突变
  24. if p.averageInterval > 0 && currentInterval > 10*p.averageInterval {
  25. // 突变,调整起始时间戳和相关累计信息
  26. p.baseTimestamp = p.lastTimestamp
  27. p.normalTotalTime = p.averageInterval
  28. p.normalCount = 1
  29. } else {
  30. // 非突变,累加时间和更新计数
  31. p.normalTotalTime += currentInterval
  32. p.normalCount++
  33. p.averageInterval = p.normalTotalTime / (p.normalCount - 1)
  34. }
  35. // 更新最后一个时间戳
  36. p.lastTimestamp = timestamp
  37. // 计算输出时间戳
  38. outputTimestamp := p.baseTimestamp + p.normalTotalTime
  39. return outputTimestamp
  40. }