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