main.go 2.8 KB

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