Repo auto make wiki page - ☆Wiki Sandbox - НТЦ 'Комплексные Системы'

Csit.Delta.ClientUtil.ReportTiming

Cтрока определения тайминга

Для задания правил определения времени начала и оканчания временного интервала по заданному моменту времени и наоборот используется строка определения тайминга специального формата.

Синтаксис строки

<TimingDesc> ::= [<BaseDef> " "] [<IntervalDef> " "] [<StepDef> " "] <BoundDef> " " <Separator> " " <BoundDef>

<BaseDef> ::= "T1" | "T2" 
<IntervalDef> ::= "I=" time_interval
<StepDef> ::= "S=" time_interval
<BoundDef> ::= [<ScheduleDef> " "] [<RankDef> " "] [<ShiftDef>]
<Separator> ::= ".." | ".:" | ":." 

<ScheduleDef> ::= schedule_def
<RankDef> ::= "^" "--"|"-"|"+"|"++" int_number
<ShiftDef> ::= "+"|"-" time_interval

Формат элементов строки

Строка определения содержит (или может содержать):

  • BaseDef
    Определяет, относительно какой границы отсчитывается тайминг. Если T1 - то относительно первой границы, T2 - относительно второй.
  • IntervalDef
    Задаёт длину интервала, описываемого таймингом
  • Step
    Задаёт шаг, с которым интервалы, описываемые таймингом, следуют друг за другом.
  • BoundDef
    Определяет правило для трансформации исходного момента времени t для получения границы интервала T1 или T2.
    Это правило может состоять из 1, 2 или 3 составляющих правил, выполняемых последовательно:
     
    • <ScheduleDef>
      Строка расписания. См. [ Формат строки расписания ]
      Если указана, то сначала выполняется поиск момента в расписании по исходному моменту времени (которым может быть t, T1 или @T2)
      Строка расписания не должна содержать пробелы. В качестве разделителя между описанием даты и описанием времени суток должен использоваться символ подчеркивания.
       
    • <RankDef>
      Задаёт ранг r расписания - то сколько раз и в какую сторону нужно отсчитать точки в расписании от исходного момента времени t1, чтобы получить искомый момент времени t2 = SCHED(t1, r)
      • 0 - означает, что результатом t2 будет t1.
      • +1 - означает, что от t1 нужно сместиться вправо (в сторону увеличения времени) до ближайшей точки в расписании. При этом, если t1 совпадает с точкой в расписании, то t2 = t1.
      • ++1 - означает, что от t1 нужно сместиться вправо (в сторону увеличения времени) до ближайшей точки в расписании. При этом, если t1 совпадает с точкой в расписании, то нужно сместиться еще раз.
      • +2 - означает, что от t1 нужно дважды сместиться вправо до ближайшей точки в расписании.
      • -1 - означает, что от t1 нужно сместиться влево до ближайшей точки в расписании. При этом, если t1 совпадает с точкой в расписании, то t2 = t1.
      • --1 - означает, что от t1 нужно сместиться влево до ближайшей точки в расписании. При этом, если t1 совпадает с точкой в расписании, то нужно сместиться еще раз.
        и так далее для любых целых чисел.
      • Ранг по умолчанию - это +1.
         
    • <ShiftDef>
      Задаёт сдвиг, который применяется после операций с расписанием (если оно задано).
      Представляет просто величину времени, прибавляемую или отнимаемую от момента времени.
  • Separator
    Разделитель между дефинициями правил для первой границы и второй границы. Вид разделителя имеет свой смысл.
  • *Разделитель ..@*
    означает, что первая и вторая границы не зависят друг от друга, и обе они вычисляются по своим правилам из исходного момента времени @t
    . Разделитель .:
    означает, что первая граница T1 вычисляется из t, а вторая граница T2 вычисляется из первой T1 Разделитель :.
    означает, что вторая граница T2 вычисляется из t, а первая граница T1 вычисляется из второй T1;
    кроме того такой тайминг задает интервал, у которого первая граница больше второй

Примеры

  • Предыдущий час
    *_*:0:0 ^--2 .: +1h
    
  • Текущий год
    I=1Y S=1Y *.1.1_00:00 ^-1 .: +1Y
    
  • От начала текущего года од конца текущего месяца
    *.1.1_0:0:0 ^-1 .. *_0:0:0
    
  • Поквартально от начала года
    I=1Y S=3M *.1,4,7,10.1_0:0 :. *.1.1_0:0 ^--1
    
  • Последние 3 часа последнего числа предыдущего месяца
    *.*.1_0:0:0 ^-1 -3h .: *_0:0:0
    

Ссылки

[1]   Формат строки расписания