Тип «Длительность»
Кроме конкретных значений даты и времени, прикладное значение имеют разности таких значений. Например, интересно узнать, сколько времени прошло между созданием файла и его последней модификацией, сколько продолжалась встреча и т. д. Также возникают ситуации, когда надо к указанному моменту времени прибавить какой-то интервал времени. Например, когда закончится событие, которое начинается в указанный момент времени (дата и время) и длится 4 часа 15 минут.
Для работы с интервалами времени предназначен тип Длительность. Этот тип хранит количество миллисекунд, описывающих некоторый интервал времени. Этот интервал может быть задан при создании значения типа Длительность или получен путем вычисления разницы между различными экземплярами работы с датой и временем.
Минимальное и максимальное значения, соответственно: -999999999999999мс и 999999999999999мс.
- С помощью конструктора типа, в котором составляющие интервала вводятся отдельными параметрами конструктора. Обязательность указания параметров конструктора зависит от используемого конструктора.
- С помощью литерала, описывающего длительность. Литерал имеет вид
[+|-][<А>д][<Б>ч][<В>м][<Г>с][<Д>мс]. В этом литерале
любой элемент может быть опущен, если соответствующее значение равно нулю. Компоненты
означают следующее:
- <А> — значение дней.
- <Б> — значение часов.
- <В> — значение минут.
- <Г> — значение секунд.
- <Д> — значение миллисекунд.
- В результате вычитания значений работы с датой и временем.
Для значений типа Длительность поддерживаются стандартные арифметические операции. Значение типа Длительность может участвовать в качестве одного из операндов в операциях сложения и вычитания для значений типа Дата, Время, Момент, ДатаВремя. Значение типа Длительность получается в результате вычитания значений типа Дата, Время, Момент, ДатаВремя.
метод Скрипт()
пер ДатаНачала = новый Дата(2020, 3, 1)
пер ДатаОкончания = Дата{2020-03-10}
пер ВремяНачала = новый Время(9, 15, 0)
пер ВремяОкончания = Время{18:0:0}
пер МоментВремени1 = новый Момент("2020-01-01 0:0:0 Z")
пер МоментВремени2 = новый Момент("2020-12-31 12:59:59 Z")
пер ПолтораЧаса = новый Длительность(1, 30, 0)
пер ДваДня = 2д
пер РезультатОперации: неизвестно
РезультатОперации = ДатаНачала + ДваДня
РезультатОперации = ДатаНачала + 5д
РезультатОперации = ДатаОкончания - ДатаНачала
РезультатОперации = МоментВремени2 - 5д14ч30м
;
Форматирование длительности
Тип Длительность является потомком типа
Форматируемое, а значит, для значений этого типа поддерживается
возможность указывать форматную строку для получения нужного представления значения
данного типа. Для форматирования длительности используется встроенный метод
Представление(Формат: Строка)
, который принимает как аргумент
указанный формат и возвращает строку с длительностью в этом формате.
ДлительностьСеминара
типа
Длительность
вызывается метод Представление(Формат:
Строка)
, который позволяет представить ее значение в виде строки
соответствующего формата. Для указания места, куда необходимо вставить значения единиц
измерения длительности, используются специальные символы. Результат форматирования помещается в переменную
ДлительностьСеминараФормат
:метод ФорматированиеДлительности(): неизвестно
пер ДлительностьСеминара = 1д5ч30м55с333мс
пер ДлительностьСеминараФормат = ДлительностьСеминара.Представление("дд:ЧЧ:мм")
возврат ДлительностьСеминараФормат
;
После вызова метода будет
возвращено:01:05:30
Представление()
не передать ни одного аргумента, то будет
использоваться значение по умолчанию: "ЗЧЧ:мм:сс"
.1ч12м.Представление("м") → 72
Если символ ближайшей меньшей единицы отсутствует в форматной строке, то данная временная единица отбрасывается:
25м13с.Представление("м") → 25
25м65с.Представление("м") → 26
В случае указания некорректной форматной строки будет выброшено исключение IllegalFormatBslException.
PnDTnHnMn.nS
, где D — дни, H — часы, M — минуты, S — секунды.
Пример:2д3ч4м.ВФорматеIso() → P2DT3H4M
-6ч3м.ВФорматеIso() → -P6H3M
Экранирование
'
. Вне
кавычек могут присутствовать только сами специальные символы, а также небуквенные
символы.
Например:метод ФорматированиеДлительности(): неизвестно
пер ДлительностьСеминара = 1д5ч30м55с333мс
пер ДатаСозданияФормат = ДлительностьСеминара.Представление("'Длительность:' д 'день' Ч 'часов'")
возврат ДатаСозданияФормат
;
После вызова метода будет
возвращено:Длительность: 1 день 5 часов
При использовании символа « ' » (одинарная кавычка) в разделе текста его необходимо экранировать еще одной кавычкой: « '' » (две подряд идущие одинарные кавычки).
Интерполяция
Для интерполяции используется метод Шаблон
типа
Строки
, который принимает как аргументы строку и переменные объекта,
которые нужно вставить в эту строку. Индекс объектов отсчитывается с нуля, т. е. с
%0.
Синтаксис:
Строки.Шаблон("Текст шаблона %Индекс1", объект с переменными).
Если объектов несколько, то передается список объектов:
Строки.Шаблон("Текст шаблона %Индекс1 ... %Индекс2 ... %ИндексN", [Объект1,
Объект2, ..., ОбъектN]).
метод ФорматированиеДлительности(): неизвестно
пер МинимальнаяДлительность = 5ч30м55с333мс
пер МаксимальнаяДлительность = 7ч40м55с333мс
пер МинимальнаяДлительностьФормат = МинимальнаяДлительность.Представление("Ч 'ч' мм 'мин'")
пер МаксимальнаяДлительностьяФормат = МаксимальнаяДлительность.Представление("Ч 'ч' мм 'мин'")
пер Диапазон = Строки.Шаблон("Длительность составит: от %0 до %1",
[МинимальнаяДлительностьФормат, МаксимальнаяДлительностьяФормат])
возврат Диапазон
;
После вызова метода будет
возвращено:Длительность составит: от 5 ч 30 мин до 7 ч 40 мин
Список доступных специальных символов для использования в форматной строке
- д
-
Количество дней.
Количество идущих подряд букв «д» задает количество цифр, которое будет использовано при выводе значения. При этом количество цифр в выводе = МАКС(количество символов «д», минимально необходимое количество цифр для вывода значения).
- Ч
-
Количество часов.
Количество подряд идущих букв «Ч» задает количество цифр, которое будет использовано при выводе значения. При этом количество цифр в выводе = МАКС(количество символов «Ч», минимально необходимое количество цифр для вывода значения).
- м
-
Количество минут.
Количество подряд идущих букв «м» задает количество цифр, которое будет использовано при выводе значения. При этом количество цифр в выводе = МАКС(количество символов «м», минимально необходимое количество цифр для вывода значения).
- с
-
Количество секунд.
Количество подряд идущих букв «с» задает количество цифр, которое будет использовано при выводе значения. При этом количество цифр в выводе = МАКС(количество символов «с», минимально необходимое количество цифр для вывода значения).
- С
-
Количество миллисекунд.
Количество идущих подряд букв «С» задает количество цифр, которое будет использовано при выводе значения. При этом количество цифр в выводе = МАКС(количество символов «С», минимально необходимое количество цифр для вывода значения).
- З
-
Знак длительности. Если длительность положительная, отформатированное значение выводится без знака минуса, если длительность отрицательная, отформатированное значение выводится с минусом: