main.go 2.9 KB

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