fncron.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "fncron.h"
  2. FnCron::FnCron(QObject* parent) : QObject(parent)
  3. {
  4. }
  5. bool FnCron::match(QString cronText, QDateTime datetime)
  6. {
  7. QStringList cronStl = cronText.split(" ");
  8. bool ret = false;
  9. if (cronStl.count() < 6)
  10. {
  11. return ret;
  12. }
  13. QTime time = datetime.time();
  14. if (matchValue(cronStl[0], time.second(), 0, 59) == false)
  15. {
  16. return ret;
  17. }
  18. if (matchValue(cronStl[1], time.minute(), 0, 59) == false)
  19. {
  20. return ret;
  21. }
  22. if (matchValue(cronStl[2], time.hour(), 0, 23) == false)
  23. {
  24. return ret;
  25. }
  26. ret = true;
  27. return ret;
  28. }
  29. bool FnCron::matchValue(QString s, int v, int minValue, int MaxValue)
  30. {
  31. if (s == "*")
  32. {
  33. return true;
  34. }
  35. bool ok;
  36. int n = s.toUInt(&ok);
  37. if (ok == true)
  38. {
  39. if ((n >= minValue) && (n <= MaxValue))
  40. {
  41. return n == v;
  42. }
  43. else
  44. {
  45. return false;
  46. }
  47. }
  48. if (s.indexOf("-") >= 0)
  49. {
  50. int a;
  51. int b;
  52. getTwoValue(s, a, b, "-");
  53. if ((v >= a) && (v <= b))
  54. {
  55. return true;
  56. }
  57. else
  58. {
  59. return false;
  60. }
  61. return false;
  62. }
  63. if (s.indexOf("/") >= 0)
  64. {
  65. int a;
  66. int b;
  67. getTwoValue(s, a, b, "/");
  68. if ((v - a) % b == 0)
  69. {
  70. return true;
  71. }
  72. return false;
  73. }
  74. if (s.indexOf(",") >= 0)
  75. {
  76. QStringList values = s.split(",");
  77. QString vs = QString("%1").arg(v);
  78. return values.indexOf(vs) >= 0;
  79. }
  80. return false;
  81. }
  82. void FnCron::getTwoValue(QString s, int& a, int& b, QString sp)
  83. {
  84. int n = s.indexOf(sp);
  85. a = s.left(n).toInt();
  86. b = s.mid(n + 1).toInt();
  87. }