Получить консультацию

Как в 1С преобразовать строку в дату

Содержание

Различия в форматах записи даты

Этот вопрос на первый взгляд достаточно простой. Но стоит только посмотреть на все возможные строковые представления дат (форматы дат), то задача получения даты из строки уже не кажется такой легкой. Ниже несколько примеров, как записывается дата в разных странах:

  • Россия: DD.MM.YYYY Пример: 24.12.2021
  • США: MM-DD-YYYY Пример: 12.24.2021
  • Венгрия: YYYY-MM-DD Пример 2021-12-24

Чтобы еще больше запутать ситуацию Чтобы внести единообразие в написание даты, был разработан стандарт ISO 8601, который предусматривает запись даты от более значимых чисел к менее значимым – год, месяц, день… и так далее. Пример: 20221224123456. Для удобства можно пользоваться разделителями. Пример
2022-12-24T12:34:56. Это важный момент, и ниже мы к нему вернемся.

Способы преобразования даты из строки

Метод Дата(), вариант по строке

Простейший способ, который подходит, если строка  с датой каноническому формату YYYYMMDDhhmmss – это использовать метод Дата(). Пример:

Дата("20211231123456")

Получим значение с типом дата: 31.12.2021 12:34:56

Также, этот метод подходит, если строка с датой записана в локальном формате (т.е. совпадает с форматом даты операционной системы).
Например, в случае если в ОС выбран русский язык, то можно получить из строки дату вот так:

Дата("24.12.2022 12:34:56")

Результат будет 24.12.2022 12:34:56

А если у вас в настройках выбран формат Английский (США), то строковое представление даты должно быть другим:

Дата("12/24/2022 01:34:56 PM")

Важно! В случае использования строки с датой в локальном формате, она должна точно соответствовать этому формату! Иначе метод выдаст ошибку “Преобразование значения к типу Дата не может быть выполнено”.

Метод Дата(), вариант по составляющим

Если нам известны составные части даты – год, месяц, день и т.д., можно использовать конструктор даты по составляющим. Задавать параметры можно как в виде строки, так и числом. Таким образом можно собрать дату из частей. Сами части можно получить различными способами – например, использовать преобразование строки в массив подстрок с помощью метода СтрРазделить().

Дата("2021", "12", "24", "12", "34", "56")

Как получить дату из строки с разделителями?

Вот мы и вернулись к вопросу – что делать, когда строка даты содержит разделители – двоеточия, слеши, дефисы или другие. Можно поочередно очищать дату от лишних символов с помощью метода СтрЗаменить, например

ДатаСтрокой = "2021/12-31 12:34:56"
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "-", "");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "/", "");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, ":", "");

Но есть более интересный способ – использование двойного преобразования строки – сперва в массив, а затем обратно:

СтрСоединить(СтрРазделить(ДатаСтрокой, "-/ :"), "");

Что делает этот код:
Мы сперва преобразуем строку в массив подстрок, разделяя по символам-разделителям пр помощи метода СтрРазделить. В нашем примере это пробел, слеш, двоеточие и дефис. Если нам нужно будет добавить какие-то другие символы – можно будет просто дополнить строку символов-разделителей.
А дальше мы обратно собираем из массива строку при помощи метода СтрСоединить;

Надеюсь, статья поможет вам разобраться, как преобразовать строку в дату. Если же хотите получить более цельное представление о разработке в 1С с нуля – рассмотрите мой видеокурс для начинающих.

1 комментарий к “Как в 1С преобразовать строку в дату”

  1. Функция СтрокаДаты_ДД_ММ_ГГГГ_ВДату(Строка)
    Д = Число(Сред(Строка, 1, 2));
    М = Число(Сред(Строка, 4, 2));
    Г = Число(Сред(Строка, 7, 4));
    Возврат Дата(Г, М, Д);

    КонецФункции

    Функция СтрокаДаты_ГГГГ_ММ_ДД_ВДату(Строка)
    Д = Число(Сред(Строка, 9, 2));
    М = Число(Сред(Строка, 6, 2));
    Г = Число(Сред(Строка, 1, 4));
    Возврат Дата(Г, М, Д);

    КонецФункции

    Функция ДатаИзСтрокиСНазваниемМесяца(ДатаСтрокой) Экспорт
    //Из строки вида 2 октября 2022
    М = СтрРазделить(СокрЛП(ДатаСтрокой), ” “, ложь);
    Если М.Количество() = 3 Тогда
    Попытка
    День = Число(СокрЛП(М[0]));
    Месяцы = Новый Массив();
    Месяцы.Добавить(“ЯНВАРЯ”); Месяцы.Добавить(“ФЕВРАЛЯ”); Месяцы.Добавить(“МАРТА”);
    Месяцы.Добавить(“АПРЕЛЯ”); Месяцы.Добавить(“МАЯ”); Месяцы.Добавить(“ИЮНЯ”);
    Месяцы.Добавить(“ИЮЛЯ”); Месяцы.Добавить(“АВГУСТА”); Месяцы.Добавить(“СЕНТЯБРЯ”);
    Месяцы.Добавить(“ОКТЯБРЯ”); Месяцы.Добавить(“НОЯБРЯ”); Месяцы.Добавить(“ДЕКАБРЯ”);
    Месяц = Месяцы.Найти(Врег(СокрЛП(М[1]))) + 1;
    Год = Число(СокрЛП(М[2]));
    Возврат Дата(Год, Месяц, День);
    Исключение
    КонецПопытки;
    КонецЕсли;
    Возврат Дата(1, 1, 1);
    КонецФункции

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

двенадцать + 8 =

К НАЧАЛУ