Преобразование строк в дату со временем
Модуль datetime содержит в себе три объекта: date , time и datetime . Очевидно, что объект date хранит в себе дату, time — время, а datetime — дату и время.
Например, этот код выведет в консоль текущую дату и время:
После запуска этого кода в консоль выводится следующее:
Без заданного форматирования используется формат строки по умолчанию — «2018-06-29 08:15:27.243860». Это стандарт ISO 8601 (YYYY-MM-DDTHH:MM:SS.mmmmmm). Если мы вводим строку в формате ISO 8601, то мы можем легко задать ее в качестве значения объекту datetime .
Взгляните на пример:
После запуска кода в консоль выводится дата, время и дата со временем:
В этом примере мы используем метод strptime . Он принимает два аргумента: строковое представление строки и ее формат. Указание формата строки значительно ускоряет обработку данных: мы освобождаем метод datetime от самостоятельного анализа формата строки. Это довольно дорогая вычислительная операция. Тип возвращаемого значения — datetime .
В нашем примере «2018-06-29 08:15:27.243860» — строка, а «%Y-%m-%d %H:%M:%S.%f» — ее формат. Возвращаемое значение datetime хранится в переменной date_time_obj . Так как datetime является объектом, мы можем вызывать методы date() и time() напрямую. Как видите, в консоль программа выводит дату и время прямо из введенной строки.
Возможно, вам интересно, что значит формат «%Y-%m-%d %H:%M:%S.%f» . Символы внутри — это токены. Каждый токен представляет собой часть даты и времени: день, месяц, год и т. д. Ознакомьтесь с документацией, если хотите узнать о видах форматирования, поддерживаемых Python. Краткая справка:
%Y : Год (4 цифры)
%m : Месяц
%d : День месяца
%H : Часы (24-часовой формат)
%M : Минуты
%S : Секунды
%f : Миллисекунды
Метод ожидает, что все токены будут дополнены нулями.
Итак, если известен формат строки, ее можно легко преобразовать в объект datetime с помощью strptime . Рассмотрим нетривиальный пример:
Как видите, эта строка была обработана без проблем. Вывод следующий:
Еще несколько примеров часто используемых форматов и токенов для парса:
Вы можете парсить строку любого формата, в этом вам поможет документация strptime , о которой мы говорили выше.
Работаем с часовыми поясами
Работу со временем и датой могут усложнить часовые пояса. Все примеры, которые мы обсуждали, — довольно примитивные объекты datetime . То есть, они не содержат данные о часовом поясе. Но у объекта datetime есть переменная, хранящая информацию о часовом поясе, — tzinfo .
Вывод tzinfo None — это примитивный datetime -объект. Для конвертирования часовых поясов в Python есть библиотека pytz . Как ее установить, описано здесь. Мы не будем подробно останавливаться на установке, а просто покажем, как использовать pytz для конвертирования времени в UTC.
+00:00 — разница между выводимым в консоль временем и UTC. В этом примере значение tzinfo — UTC, поэтому смещение 00:00 . В данном случае объект datetime учитывает часовой пояс.
Точно так же мы можем преобразовать строки с датой и временем в любой другой часовой пояс. Например, мы можем преобразовать строку «2018-06-29 17:08:00.586525+00:00» в часовой пояс «Америка/Нью-Йорк»:
В начале программы мы конвертировали строку в datetime -объект, date_time_obj . Затем мы конвертировали его в datetime -объект с часовым поясом — timezone_date_time_obj . Поскольку мы поставили часовой пояс «Америка/Нью-Йорк», в выводе отобразится время, отстающее от UTC на 4 часа. Подробнее познакомиться с часовыми поясами можно здесь.
Изменение часовых поясов
Мы можем изменять часовые пояса datetime -объектов. Делается это следующим образом:
В начале программы мы создали datetime -объект и установили часовой пояс «Америка/Нью-Йорк». После этого мы использовали метод astimezone() , чтобы поменять часовой пояс на «Европа/Лондон». Вывод этих двух объектов в консоли:
Как и ожидалось, время отличается: между часовыми поясами разница в пять часов.
Использование сторонних библиотек
Модуль datetime может конвертировать любые строки в datetime -объекты. Но есть проблема: для этого необходимо написать подходящее форматирование, которое strptime сможет понять. На это уходит время, код становится сложнее читать. Для упрощения этого процесса можно использовать сторонние библиотеки.
Бывает, что сторонние библиотеки имеют более удобные методы манипуляции и сравнения дат и времени. В некоторых даже встроены часовые пояса — вам не придется импортировать лишние библиотеки.
Познакомимся с некоторыми из них.
dateutil
Модуль dateutil — расширение модуля datetime . Главное преимущество — не нужно писать код для парса строки. Пример:
Функция parse автоматически парсит строку и сохранит ее в переменной datetime . Парсинг происходит автоматически. То есть, отпадает нужда в форматировании. Попробуем спарсить разные типы строк с помощью dateutil :
Как видите, с помощью модуля dateutil легко парсится практически любая строка.
Хоть это и удобно, но помните — прогнозирование формата замедляет выполнение кода. Если это критично — этот модуль не для вас.
Maya также может упростить парсинг строк и смену часовых поясов. Простые примеры:
Изменение часового пояса:
Просто, не так ли? Опробуем maya с тем же списком строк, который был в случае с dateutil :
Как видите, все форматы даты успешно пропарсены.
Но заметили ли вы разницу? Если мы не указываем часовой пояс, он автоматически конвертируется в UTC. Именно поэтому важно запомнить, что нужно указать параметры to_timezone и naive , если время не в UTC.
Arrow
Arrow — еще одна библиотека для работы с датой и временем. Как и maya , эта библиотека определяет формат даты и времени. После выполнения кода возвращается datetime -объект из объекта arrow .
Попробуем спарсить ту же строку, которая была в примере с maya:
Изменить часовой пояс можно с помощью метода to :
Как видите, строка с датой и временем конвертировалась в регион «Америка/Нью-Йорк».
Попробуем спарсить список строк из примеров выше:
Половина строк, которые закомментированы, вызовут ошибку. Вывод остальных:
Для того чтобы спарсить закомментированные строки, необходимо указать токены. Они должны помочь библиотеке понять, как правильно их парсить. Например, «MMM» — для названий месяца воде «Jan, Feb, Mar». Документацию, в которой подробно рассказывается обо всех токенах, можно прочесть здесь.

Английский для программистов
Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас
Как преобразовать строку в дату 1С 8.3

Значение типа Дата – один из самых простых типов данных в 1С, который встречается практически постоянно. Ее значение содержит дату григорианского календаря с 01 января 0001 года с точностью до 0,1 миллисекунды.
Создание переменной типа дата приравнивается к переменной строки цифр ‘ГГГГММДДччммсс’, где ГГГГ – год, ММ – месяц, чч – часы (в формате 24 часа), мм – минуты, сс – секунды.
Часто возникают ситуации при работе в 1С перевести строку в дату. Например, при написании даты в формате 18.12.18, 18/12/2018, или другие варианты. Если часы, минуты, секунды опустить, то они приравняются к нулю. Если мы опускаем дату, то она считается равной 1.
Далее мы рассмотрим, как можно сделать преобразование строки в дату. Это действие несложное, но требует определенных знаний. Если у вас возникнут вопросы, обращайтесь за консультацией по программе 1С к нашим специалистам – мы с радостью вам поможем.
Рассмотрим, как можно сделать преобразование строки в дату.
- Преобразование строки вида «20181218»
- Преобразование строки вида «18.12.2018»
- Преобразование строки вида «2019, 1, 1»
- Преобразование строки вида «2018-12-18»
- Преобразование строки вида «2018/12/18»
В последних двух примерах удаляется лишний символ в написании даты. Это может быть любой символ разделитель, главное – его или убрать, или заменить точкой.
Предположим нам надо преобразовать дату, в которой сначала указано время, а затем сама дата.
- Преобразование строки вида «21:31:02 2018:12:18»
В данном примере мы заменяем символ «:» и берем 8 чисел справа (дату – год, месяц, день), затем приписываем к ним 6 чисел слева (время – часы, минуты, секунды).
Преобразовать строковое представление даты в значение типа дата, можно также используя функцию СтрВДату. Это более универсальная функция, поэтому она справляется с любым форматом написания даты, даже текстовым.
На примерах мы рассмотрели возможность преобразования строки в дату. Используя различные функции можно преобразовать строковое представление даты, введенное различными вариантами написания в значение типа дата. Такие преобразования необходимы, ведь бывает, что пользователь при вводе даты, используя дополнительную клавиатуру, установит как разделитель косую черту, запятую или другой знак, или из написанной текстом даты возникает необходимость ее преобразовать. Во всех этих случаях данные функции будут полезны.
Если у вас регулярно возникают вопросы по настройке программы, обратитесь к нашим специалистам: мы проконсультируем вас и сделаем соответствующие настройки, подобрав при этом оптимальный тариф на сопровождение 1С, исходя из ваших индивидуальных потребностей.
Как в 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 – это использовать метод Дата(). Пример:
Получим значение с типом дата: 31.12.2021 12:34:56
Также, этот метод подходит, если строка с датой записана в локальном формате (т.е. совпадает с форматом даты операционной системы).
Например, в случае если в ОС выбран русский язык, то можно получить из строки дату вот так:
Результат будет 24.12.2022 12:34:56
А если у вас в настройках выбран формат Английский (США), то строковое представление даты должно быть другим:
Важно! В случае использования строки с датой в локальном формате, она должна точно соответствовать этому формату! Иначе метод выдаст ошибку “Преобразование значения к типу Дата не может быть выполнено”.
Метод Дата(), вариант по составляющим
Если нам известны составные части даты – год, месяц, день и т.д., можно использовать конструктор даты по составляющим. Задавать параметры можно как в виде строки, так и числом. Таким образом можно собрать дату из частей. Сами части можно получить различными способами – например, использовать преобразование строки в массив подстрок с помощью метода СтрРазделить().
Как получить дату из строки с разделителями?
Вот мы и вернулись к вопросу – что делать, когда строка даты содержит разделители – двоеточия, слеши, дефисы или другие. Можно поочередно очищать дату от лишних символов с помощью метода СтрЗаменить, например
Но есть более интересный способ – использование двойного преобразования строки – сперва в массив, а затем обратно:
Что делает этот код:
Мы сперва преобразуем строку в массив подстрок, разделяя по символам-разделителям пр помощи метода СтрРазделить. В нашем примере это пробел, слеш, двоеточие и дефис. Если нам нужно будет добавить какие-то другие символы – можно будет просто дополнить строку символов-разделителей.
А дальше мы обратно собираем из массива строку при помощи метода СтрСоединить;
Надеюсь, статья поможет вам разобраться, как преобразовать строку в дату. Если же хотите получить более цельное представление о разработке в 1С с нуля – рассмотрите мой видеокурс для начинающих.