Blame view

netcore/src/Infrastructure/NCC/TaskScheduler/Cron/CronField.cs 2.81 KB
de2bd2f9   “wangming”   项目初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  namespace NCC.TaskScheduler
  {
      /// <summary>
      /// Cron 表达式内置字段
      /// </summary>
      internal sealed class CronField
      {
          private static readonly string[] MonthNames =
          {
              null, "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"
          };
  
          private static readonly string[] DayOfWeekNames =
          {
              "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"
          };
  
          private static readonly int[] MonthNamesArray = new int[MonthNames.Length];
          private static readonly int[] DayOfWeekNamesArray = new int[DayOfWeekNames.Length];
  
          // 0 and 7 are both Sunday, for compatibility reasons.
          public static readonly CronField DaysOfWeek = new("Days of week", 0, 7, DayOfWeekNamesArray, false);
  
          public static readonly CronField Months = new("Months", 1, 12, MonthNamesArray, false);
          public static readonly CronField DaysOfMonth = new("Days of month", 1, 31, null, false);
          public static readonly CronField Hours = new("Hours", 0, 23, null, true);
          public static readonly CronField Minutes = new("Minutes", 0, 59, null, true);
          public static readonly CronField Seconds = new("Seconds", 0, 59, null, true);
  
          static CronField()
          {
              for (var i = 1; i < MonthNames.Length; i++)
              {
                  var name = MonthNames[i].ToUpperInvariant();
                  var array = new char[3];
                  array[0] = name[0];
                  array[1] = name[1];
                  array[2] = name[2];
  
                  var combined = name[0] | (name[1] << 8) | (name[2] << 16);
  
                  MonthNamesArray[i] = combined;
              }
  
              for (var i = 0; i < DayOfWeekNames.Length; i++)
              {
                  var name = DayOfWeekNames[i].ToUpperInvariant();
                  var array = new char[3];
                  array[0] = name[0];
                  array[1] = name[1];
                  array[2] = name[2];
  
                  var combined = name[0] | (name[1] << 8) | (name[2] << 16);
  
                  DayOfWeekNamesArray[i] = combined;
              }
          }
  
          public readonly string Name;
          public readonly int First;
          public readonly int Last;
          public readonly int[] Names;
          public readonly bool CanDefineInterval;
          public readonly long AllBits;
  
          private CronField(string name, int first, int last, int[] names, bool canDefineInterval)
          {
              Name = name;
              First = first;
              Last = last;
              Names = names;
              CanDefineInterval = canDefineInterval;
              for (var i = First; i <= Last; i++)
              {
                  AllBits |= (1L << i);
              }
          }
  
          public override string ToString()
          {
              return Name;
          }
      }
  }