Тип «ДатаВремя»

Тип для работы с датой и временем. Значение типа ДатаВремя может быть задано следующими способами:

  • С помощью литерала вида ДатаВремя{\<дата\>\<разделитель_сегментов\>\<время\>}, где
    • \<дата\> имеет формат: гггг-ММ-дд.
    • \<разделитель_сегментов\> — символ неразрывного пробела   или T.
    • \<время\> имеет формат: ЧЧ:мм(:cc(.ССС)?)?.
    Описание элементов строковых литералов и форматных строк приведено здесь. Пример литерала:
    ДатаВремя{2019-05-01 23:30:40}
    В примере ниже литерал со значениями даты и времени помещается в переменную, после чего для него вызывается метод Представление(), в который как аргумент передается форматная строка:
    метод Скрипт()
        пер ДатаСоздания = ДатаВремя{2019-05-01 23:30:40}
        пер ДатаСозданияФормат = ДатаСоздания.Представление("дд ММММ гггг', 'ЧЧ:мм:сс")
        Консоль.Записать(ДатаСозданияФормат)
    ;
    Результат:
    01 мая 2019, 23:30:40
    Значение по умолчанию: 0001-01-01 00:00:00.000.
  • С помощью конструктора типа, в котором дата и время указываются в виде строки: ДатаВремя(Представление: Строка). Формат строки см. выше, в описании литерала. В примере ниже в переменную помещается новый объект типа ДатаВремя, как аргумент для которого передается строка соответствующего формата:
    метод Скрипт()
        пер ДатаСоздания = новый ДатаВремя("2019-05-01 23:30:40")
        пер ДатаСозданияФормат = ДатаСоздания.Представление()
        Консоль.Записать(ДатаСозданияФормат)
    ;
  • С помощью конструктора типа, в котором составляющие даты и, опционально, времени вводятся отдельными параметрами конструктора: ДатаВремя(Год: Число, Месяц: Число, День: Число, Час: Число, Минута: Число, Секунда: Число, Миллисекунда: Число = 0). При вводе только даты параметры времени можно ввести потом с помощью специальных методов. Пример:
    ДатаВремя(2019,05,01,23:30:40)
  • С помощью конструктора типа, в который передаются литералы типов Дата и Время: ДатаВремя(Дата: Дата, Время: Время). Пример:
    ДатаВремя(Дата{2019-05-01},Время{23:30:40})
  • Из значения типа Момент с помощью метода ВДатаВремя(). При этом необходимо указать, для какого часового пояса должно быть приведено время из значения Момент. Если данный экземпляр является значением по умолчанию типа Момент (0001.01.01 00:00:00.000Z), будет возвращено значение по умолчанию для типа ДатаВремя (0001.01.01 00:00:00.000). Пример:
    метод Скрипт()
        пер МоментСоздания = новый Момент(2019, 05, 01, 23, 30, 40, 345, ЧасовойПояс{UTC+3})
        пер МоментСозданияФормат = МоментСоздания.ВДатаВремя(ЧасовойПояс{UTC})
        Консоль.Записать(МоментСозданияФормат)
    ;

Форматирование даты и времени

Тип ДатаВремя является потомком типа Форматируемое, а значит, для значений этого типа поддерживается возможность указывать форматную строку для получения нужного представления значения данного типа. Для форматирования даты и времени используется встроенный метод Представление(), который принимает как аргумент указанный формат и возвращает строку с датой и временем в этом формате.

Пример

В примере ниже для переменной ДатаСоздания типа ДатаВремя вызывается метод Представление(), который позволяет представить ее значение в виде строки соответствующего формата. Результат форматирования помещается в переменную ДатаСозданияФормат и выводится в консоль:
метод Скрипт()
    пер ДатаСоздания = новый ДатаВремя(2019, 5, 1, 23, 30, 40)
    пер ДатаСозданияФормат = ДатаСоздания.Представление("дд ММММ гггг ЧЧ:мм:сс")
    Консоль.Записать(ДатаСозданияФормат)
;
Результат:
01 мая 2019 23:30:40
Если в метод Представление() не передать аргумент, то будет использоваться значение по умолчанию: "дд.ММ.гггг ЧЧ:мм:сс".

Экранирование

Для экранирования используется символ ' (одинарная кавычка). Таким образом, символы, которые надо отделить от переменных формата, заключаются в одинарные кавычки. Например:
метод Скрипт()
    пер ДатаСоздания = новый ДатаВремя(2019, 5, 1, 23, 30, 40)
    пер ДатаСозданияФормат = ДатаСоздания.Представление("дд ММММ гггг', 'ЧЧ:мм:сс")
    Консоль.Записать(ДатаСозданияФормат)
;
Результат:
01 мая 2019, 23:30:40
В примере выше экранирование используется для запятой и пробела (', '), которые разделяют дату и время.

Интерполяция

Для интерполяции используется метод Шаблон типа Строки, который принимает как аргументы строку и переменные объекта, которые нужно вставить в эту строку. Индекс объектов отсчитывается с нуля, т. е. с %0.

Синтаксис:

Строки.Шаблон("Текст шаблона %Индекс1", объект с переменными).

Если объектов несколько, то передается список объектов:

Строки.Шаблон("Текст шаблона %Индекс1 ... %Индекс2 ... %ИндексN", [Объект1, Объект2, ..., ОбъектN]).

Например:
метод Скрипт()
    пер ДатаНачала = новый ДатаВремя(2019, 5, 21, 12, 00, 00)
    пер ДатаОкончания = новый ДатаВремя(2019, 5, 24, 23, 59, 59)
    пер ДатаНачалаФормат = ДатаНачала.Представление("дд ММММ")
    пер ДатаОкончанияФормат = ДатаОкончания.Представление("дд ММММ гггг")
    пер Период = Строки.Шаблон("С %0 по %1 года", [ДатаНачалаФормат, ДатаОкончанияФормат])
    Консоль.Записать(Период)
;
Результат:
С 21 мая по 24 мая 2019 года

Формат можно включить непосредственно в саму строку шаблона с переменными:

Синтаксис:

Строки.Шаблон("Текст шаблона %Индекс1{Формат}", объект с переменными).

Например:
Строки.Шаблон("С %0{дд ММММ} по %1{дд ММММ гггг} года", [ДатаНачала, ДатаОкончания])
Результат будет тем же самым.

Список доступных форматов

г
Год, в диапазоне от 0 до 99, без ведущего нуля.
0001-01-01T00:00:00 -> 1
0900-01-01T00:00:00 -> 0
1900-01-01T00:00:00 -> 0
2009-06-15T13:45:30 -> 9
2019-06-15T13:45:30 -> 19
гг
Год, в диапазоне от 00 до 99, с ведущим нулем.
0001-01-01T00:00:00 -> 01
0900-01-01T00:00:00 -> 00
1900-01-01T00:00:00 -> 00
2019-06-15T13:45:30 -> 19
гггг
Год в виде четырехзначного числа.
0001-01-01T00:00:00 -> 0001
0900-01-01T00:00:00 -> 0900
1900-01-01T00:00:00 -> 1900
2009-06-15T13:45:30 -> 2009
К
Квартал в формате 1-4.
2009-01-12T13:45:30.6170000 → 1
М
Месяц, в диапазоне от 1 до 12, без ведущего нуля.
2009-06-15T13:45:30 -> 6
ММ
Месяц, в диапазоне от 01 до 12, с ведущим нулем.
2009-06-15T13:45:30 -> 06
МММ
Сокращенное название месяца.
2009-01-15T13:45:30 -> янв.
ММММ
Полное название месяца.
2009-01-15T13:45:30 -> января
д
День месяца, в диапазоне от 1 до 31, без ведущего нуля.
2009-06-01T13:45:30 -> 1
2009-06-15T13:45:30 -> 15
дд
День месяца, в диапазоне от 01 до 31, с ведущим нулем.
2009-06-01T13:45:30 -> 01
2009-06-15T13:45:30 -> 15
ддд
Сокращенное название дня недели.
2009-06-15T13:45:30 -> пн
дддд
Полное название дня недели.
2009-06-15T13:45:30 -> понедельник
Д
Порядковый номер дня в неделе.
2009-01-12T13:45:30 -> 1
2009-02-03T13:45:30 -> 2
ДД
Порядковый номер дня в году.
2009-01-12T13:45:30 -> 12
2009-02-03T13:45:30 -> 34
ч
Час в 12-часовом формате, в диапазоне от 1 до 12, без ведущего нуля.
2009-06-15T01:45:30 -> 1
2009-06-15T13:45:30 -> 1
чч
Час в 12-часовом формате, в диапазоне от 01 до 12, с ведущим нулем.
2009-06-15T01:45:30 -> 01
2009-06-15T13:45:30 -> 01
Ч
Час в 24-часовом формате, в диапазоне от 0 до 23, без ведущего нуля.
2009-06-15T01:45:30 -> 1
2009-06-15T13:45:30 -> 13
ЧЧ
Час в 24-часовом формате, в диапазоне от 00 до 23, с ведущим нулем.
2009-06-15T01:45:30 -> 01
2009-06-15T13:45:30 -> 13
м
Минуты, в диапазоне от 0 до 59, без ведущего нуля.
2009-06-15T01:09:30 -> 9
2009-06-15T13:29:30 -> 29
мм
Минуты, в диапазоне от 00 до 59, с ведущим нулем.
2009-06-15T01:09:30 -> 09
2009-06-15T01:45:30 -> 45
с
Секунды, в диапазоне от 0 до 59, без ведущего нуля.
2009-06-15T13:45:09 -> 9
сс
Секунды, в диапазоне от 00 до 59, с ведущим нулем.
2009-06-15T13:45:09 -> 09
С
Миллисекунды с точностью до сотен, в диапазоне от 0 до 9.
2009-06-15T13:45:09.345 -> 3
СС
Миллисекунды с точностью до десятков, в диапазоне от 0 до 99.
2009-06-15T13:45:09.345 -> 34
ССС
Миллисекунды с точностью до единиц, в диапазоне от 0 до 999.
2009-06-15T13:45:09.345 -> 345