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