main.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "time"
  6. )
  7. type CollectWindowStruct struct {
  8. Flag int `yaml:"flag"`
  9. Days []string `yaml:"days,omitempty"`
  10. Start string `yaml:"start_time"`
  11. End string `yaml:"end_time"`
  12. StartTime time.Time
  13. EndTime time.Time
  14. }
  15. func IsTimeAllowed(currentTime time.Time, startStr, endStr string) bool {
  16. // 模拟解析数据
  17. cw := CollectWindowStruct{
  18. Flag: 1,
  19. Days: []string{},
  20. Start: startStr,
  21. End: endStr,
  22. }
  23. // 单独解析采集时间
  24. startTime, err := time.Parse("15:04", cw.Start)
  25. if err != nil {
  26. fmt.Println("云端配置文件解析采集时间【startTime】失败 ", err, "取默认值【00:00】")
  27. cw.StartTime, _ = time.Parse("15:04", "00:00")
  28. }
  29. cw.StartTime = startTime
  30. endTime, err := time.Parse("15:04", cw.End)
  31. if err != nil {
  32. fmt.Println("云端配置文件解析采集时间【endTime】失败 ", err, "取默认值【23:59】")
  33. cw.EndTime, _ = time.Parse("15:04", "23:59")
  34. }
  35. cw.EndTime = endTime
  36. if len(cw.Days) == 0 {
  37. // 默认设置为每天
  38. cw.Days = []string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
  39. }
  40. // todo 待测逻辑
  41. if cw.Flag == 0 { // 关闭固定时间段采集, 则都返回true
  42. fmt.Println("已关闭采集时间段限制")
  43. return true
  44. }
  45. if len(cw.Days) > 0 { // 如果指定了周几
  46. currentDay := currentTime.Weekday().String()
  47. fmt.Println("currentDay", currentDay)
  48. included := false
  49. for _, day := range cw.Days {
  50. if day == currentDay {
  51. fmt.Println("当前时间符合规定的日期要求")
  52. included = true
  53. break
  54. }
  55. }
  56. if !included {
  57. fmt.Println("当前时间不符合规定的日期要求")
  58. return false
  59. }
  60. }
  61. start := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), cw.StartTime.Hour(), cw.StartTime.Minute(), cw.StartTime.Second(), 0, currentTime.Location())
  62. end := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), cw.EndTime.Hour(), cw.EndTime.Minute(), cw.EndTime.Second(), 0, currentTime.Location())
  63. fmt.Println("start", start)
  64. fmt.Println("end", end)
  65. if start.After(end) { // 如果时段跨天
  66. end = end.AddDate(0, 0, 1)
  67. fmt.Println("当前时间设置的时间段跨天,更正end时间", end)
  68. }
  69. return !currentTime.Before(start) && currentTime.Before(end)
  70. }
  71. func main() {
  72. if len(os.Args) == 2 {
  73. fmt.Println("接收到的参数为:", os.Args[1:])
  74. } else {
  75. fmt.Println("参数数量应该为【2】,请输入开始时间和结束时间")
  76. }
  77. startStr := os.Args[1]
  78. endStr := os.Args[2]
  79. fmt.Println("输入的开始时间:", startStr)
  80. fmt.Println("输入的结束时间:", endStr)
  81. flag := IsTimeAllowed(time.Now(), startStr, endStr)
  82. if flag {
  83. fmt.Println("当前时间段符合规定,允许采集")
  84. } else {
  85. fmt.Println("当前时间段不符合规定,不允许采集")
  86. }
  87. }