Как перевести строку в дату
Как преобразовать строку в дату 1С 8.3
Очень частая задача в программировании 1С — преобразование одного типа данных в другой. Проблема преобразования строки в дату — это произвольность написания строки. Кому-то требуется превратить строку «15.12.15» в нужное число, у кого-то значение «15 декабря 2015 года», а возможно, «15.12.2015 20:42:22».
Рассмотрим примерные варианты решения такой задачи.
Варианты преобразования даты из строки
Проще всего преобразовать строку вида «20151215204222», используя метод «Дата»:
Со строкой «15.12.2015 20:42:22» также прекрасно справляется типовой метод:
Второй вариант, если мы знаем отдельные составляющие даты в строковом формате: год, месяц, день и т.д:
Пример преобразования строки вида «2015-12-15 20:42:22»:
Если дата указан так «20:42:22 2015/12/15», можно преобразовать её следующим образом:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Преобразование строк в дату со временем
Например, этот код выведет в консоль текущую дату и время:
После запуска этого кода в консоль выводится следующее:
Взгляните на пример:
После запуска кода в консоль выводится дата, время и дата со временем:
%Y : Год (4 цифры)
%m : Месяц
%d : День месяца
%H : Часы (24-часовой формат)
%M : Минуты
%S : Секунды
%f : Миллисекунды
Метод ожидает, что все токены будут дополнены нулями.
Как видите, эта строка была обработана без проблем. Вывод следующий:
Еще несколько примеров часто используемых форматов и токенов для парса:
Работаем с часовыми поясами
Точно так же мы можем преобразовать строки с датой и временем в любой другой часовой пояс. Например, мы можем преобразовать строку «2018-06-29 17:08:00.586525+00:00» в часовой пояс «Америка/Нью-Йорк»:
Изменение часовых поясов
Как и ожидалось, время отличается: между часовыми поясами разница в пять часов.
Использование сторонних библиотек
Бывает, что сторонние библиотеки имеют более удобные методы манипуляции и сравнения дат и времени. В некоторых даже встроены часовые пояса — вам не придется импортировать лишние библиотеки.
Познакомимся с некоторыми из них.
dateutil
Как видите, с помощью модуля dateutil легко парсится практически любая строка.
Хоть это и удобно, но помните — прогнозирование формата замедляет выполнение кода. Если это критично — этот модуль не для вас.
Maya также может упростить парсинг строк и смену часовых поясов. Простые примеры:
Изменение часового пояса:
Просто, не так ли? Опробуем maya с тем же списком строк, который был в случае с dateutil :
Как видите, все форматы даты успешно пропарсены.
Arrow
Попробуем спарсить ту же строку, которая была в примере с maya:
Изменить часовой пояс можно с помощью метода to :
Как видите, строка с датой и временем конвертировалась в регион «Америка/Нью-Йорк».
Попробуем спарсить список строк из примеров выше:
Половина строк, которые закомментированы, вызовут ошибку. Вывод остальных:
Для того чтобы спарсить закомментированные строки, необходимо указать токены. Они должны помочь библиотеке понять, как правильно их парсить. Например, «MMM» — для названий месяца воде «Jan, Feb, Mar». Документацию, в которой подробно рассказывается обо всех токенах, можно прочесть здесь.
Преобразование строки в дату
Функция преобразует строку в дату.
Возможные варианты: «27/янв\2015 3-15-22», «1 янв 2005г. ::01», 20150320220315, «2/3/55», «05/3/15», «1 ФеВраЛЯ 05 г. 20:01:0», «1 янв. 2005 г ::», «1 янв 2005г ::01», «1 ФеВраЛь 05 г. 0:02:», «1 янВа 2005 г. 20:01», «02/04/2015», «20150320220315», «27.08.2015 3:15:22», «27.08-2015 5:24»
Причиной создания этой функции послужил вот такой формат даты «1 Января 2015 г. 13:25». И чтобы сто раз не возвращаться к теме, сделал что-то универсальное, дабы не тратить время в будущем.
В функции много комментариев.
Для более быстрой адаптации к др.языкам (локализация) создан массив п_мФорматы()
Кто-то заметит, что можно сделать «проще», добавив разделители даты и времени в параметры функции. Но, может попасться «свалка» с различными форматами и тут уже придется долго перебирать все варианты. Поэтому я остановился на множественном «Поиск и Замене»(СтрЗаменить()) вероятных разделителей.
Также, задумывалось, что будут возвращаться параметрами функции (Год, Месяц, День. ), но в последствии я от этого отказался. В коде присутствуют остатки от этой затеи, которые не влияют на скорость,а лишь несколько строк(присвоение значений промежуточным переменным) можно сократить.
Конечно, замечания и критика приветствуются. Спасибо.
Специальные предложения
конструктор форматной строки для даты: ДФ=’d ММММ yyyy «г.» чч:мм’
Примеры использования
echo FormatDateFromDB(’01/23/2013′, ‘DD MMMM YYYY’); // вернет 23 Enero 2013, если язык сайта испанский
echo FormatDateFromDB(‘7 June 2012 12:00pm’, ‘DD.MM’); // вернет 07.06 для любого языка
(9) premier, (9) premier, вы протестируйте на нескольких сотнях тыщ и будете удивлены. Только не пакетную передачу, а по одной переменной.
))) Блин. вы занудствуете. Если вам известно, что «2/3/55» это время, так передайте в функцию «1/1/01 «+»2/3/55» и не нужны никакие форматы. Вам же известно, что это время. если, конечно, вы не Чумак или Кашпировский ))) Могли бы добавить критики, что функция не отрабатывает «// 2/3/55», а такой «2/3/55 //» делает )) Ну, я же надеялся на вас )
Чтобы анализировать строки для преобразования их в объекты DateTime, нужно указать, как значения даты и времени представлены в текстовом формате. Для различных языков и региональных параметров значения дня, месяца и года приводятся в разном порядке. В одних представлениях времени используется 24-часовой формат, в других же указываются значения AM и PM. В одних приложениях требуется только дата. В других — только время. А в некоторых нужно указывать и дату, и время. Методы преобразования строк в объекты DateTime позволяют предоставлять подробные сведения о требуемых форматах и элементах дат и времени, которые необходимы для вашего приложения. Есть три подзадачи для правильного преобразования текста в DateTime:
Методы Parse и TryParse позволяют преобразовать много стандартных представлений даты и времени. Методы ParseExactи TryParseExact позволяют преобразовать строковое представление, соответствующее шаблону, указанному в строке формата даты и времени. (Дополнительные сведения см. в статьях Строки стандартных форматов даты и времени и Строки настраиваемых форматов даты и времени.)
Текущий объект DateTimeFormatInfo обеспечивает более точный контроль над тем, как текст должен интерпретироваться в качестве даты и времени. В свойствах DateTimeFormatInfo описываются разделители даты и времени, названия месяцев, дней и эр, а также формат для обозначения AM и PM. Объект DateTimeFormatInfo в текущем потоке представляет текущие язык и региональные параметры. Если требуется задать определенные язык и региональные параметры или настраиваемые параметры, укажите для метода анализа параметр IFormatProvider. Для параметра IFormatProvider следует указать объект CultureInfo, представляющий язык и региональные параметры, или объект DateTimeFormatInfo.
В тексте, представляющем дату и время, могут отсутствовать некоторые сведения. Например, большинство пользователей будет считать, что дата «12 марта» относится к текущему году. Аналогичным образом, «март 2018 г.» представляет месяц март 2018 года. Текст, представляющий время, часто включает только часы, минуты и обозначение AM или PM. При помощи методов анализа эти отсутствующие данные обрабатываются с использованием обоснованных значений по умолчанию:
Если в строке есть дата, она должна включать месяц и день или год. Если указано время, значение должно содержать час и минуты или обозначение AM либо PM.
Поставщик формата также используется для интерпретации неоднозначных числовых дат. Например, в строке «02/03/04» неясно, какие компоненты соответствуют месяцу, дню и году. Такие компоненты интерпретируются согласно их порядку расположения в схожих форматах даты в поставщике формата.
Parse
Ниже приведен пример использования метода DateTime.Parse для преобразования string в DateTime. В этом примере используются язык и региональные параметры, связанные с текущим потоком. Если класс CultureInfo, связанный с текущим значением языка и региональных параметров, не может выполнить синтаксический анализ исходной строки, создается исключение FormatException.
Все примеры C# в этой статье выполняются в браузере. Нажмите кнопку Выполнить, чтобы просмотреть выходные данные. Вы можете поэкспериментировать, изменяя их значения.
Эти примеры для C# и Visual Basic см. в репозитории с документацией GitHub.
Кроме того, вы можете явно определить язык и региональные параметры, соглашения о форматировании для которых используются при анализе строки. Укажите один из стандартных объектов DateTimeFormatInfo, возвращенных свойством CultureInfo.DateTimeFormat. В приведенном ниже примере поставщик формата используется для анализа строки на немецком языке в DateTime. Для представления языка и региональных параметров de-DE создается CultureInfo. Этот объект CultureInfo обеспечивает успешный анализ определенной строки. Это устраняет необходимость задания каких-либо параметров в CurrentCulture потока CurrentThread.
Для указания поставщиков пользовательских форматов можно использовать перегрузки метода Parse. Но такой метод не поддерживает анализ нестандартных форматов. Вместо этого используйте метод ParseExact для анализа даты и времени, выраженных в нестандартном формате.
В приведенном ниже примере перечисление DateTimeStyles указывает, что текущие значения даты и времени не нужно добавлять в DateTime для неуказанных полей.
Преобразование дат из текстового формата в формат даты
В некоторых случаях даты могут быть отформатированы и храниться в ячейках в виде текста. Например, вы могли ввели дату в ячейку, отформатированную как текст, или данные были импортированы или вклеированы из внешнего источника данных как текст.
Поскольку функция проверки ошибок в Excel распознает даты в текстовом формате с двузначным номером года, можно воспользоваться средством автозамены и преобразовать их в даты в формате даты. Для преобразования большинства других типов текстовых дат в даты можно использовать функцию ДАТАVALUE.
При импорте данных в Excel из другого источника или при вводе дат с двузначным номером года в ячейки, которые ранее были отформатированы как текст, в левом верхнем углу ячейки может появиться маленький зеленый треугольник. Этот индикатор ошибки указывает на то, что дата хранится в текстовом формате, как показано в данном примере.
С помощью индикатора ошибки можно преобразовать даты из текста в формат даты.
Примечания: Сначала убедитесь, что в Excel включена Excel. Для этого:
Щелкните Файл > Параметры > Формулы.
В Excel 2007 нажмите кнопку Microsoft Office 
В области «Проверка ошибок» проверьте, включить фоновую проверку ошибок. Все найденные ошибки помечаются треугольником в левом верхнем углу ячейки.
В области Правила проверки ошибоквыберите ячейки, содержащие годы, представленные 2 цифрами.
Выполните эту процедуру, чтобы преобразовать дату в текстовом формате в обычную дату:
Выделите ячейку или диапазон смежных ячеек с индикатором ошибки в верхнем левом углу. Дополнительные сведения см. в статье Выбор ячеек, диапазонов, строк и столбцов на сайте.
Совет: Чтобы отменить выделение ячеек, щелкните любую ячейку на листе.
Нажмите кнопку ошибки, которая появляется рядом с выбранными ячейками.
В меню выберите команду Преобразовать XX в 20XX или Преобразовать XX в 19XX. Если вы хотите отклонять индикатор ошибки, не преобразовав число, нажмите кнопку Игнорировать ошибку.
Текстовые даты с двузначным номером года преобразуются в стандартные даты с четырехзначным номером года.
После преобразования ячеек с текстовыми значениями можно изменить внешний вид дат путем применения формата даты.
Если на вашем компьютере есть даты, которые, возможно, были импортированы или в скобки, выглядят как числа, как по рисунку ниже, лучше отформатировать их так, чтобы они были краткими или длинными. Формат даты также будет полезен, если вы хотите отфильтровать, отсортировать или использовать его в вычислениях с датами.
Вы выберите ячейку, диапазон ячеев или столбец, которые нужно переформатировать.
Щелкните Числовом формате и выберите нужный формат даты.
Краткий формат даты выглядит так:
Длинная дата содержит дополнительные сведения, как по рисунку:
Чтобы преобразовать текстовую дату в ячейке в числовой, используйте функцию ДАТА.ДАТА.В.. Затем скопируйте формулу, выделите ячейки с датами в текстовом формате и применив к ним формат даты с помощью специальной ветви.
Выберите пустую ячейку и убедитесь, что ее число имеет форматОбщий.
В пустой ячейке сделайте следующее.
Щелкните ячейку, содержащую дату в текстовом формате, которую следует преобразовать.
Нажмите ввод, и функция ДАТАVALUE возвращает порядковый номер даты, представленной текстовой датой.
Что такое Excel серийный номер?
В Excel даты хранятся в виде порядковых номеров, что позволяет использовать их в вычислениях. По умолчанию: 1 января 1900, порядковый номер 1, а 1 января 2008 г. — число 39448, поскольку через 39 448 дней после 1 января 1900.To скопируйте формулу преобразования в диапазон последовательных ячеек, вы выберите ячейку, содержащую введенную формулу, и перетащите его 
В результате получится диапазон ячеек с порядковыми номерами, который соответствует диапазону ячеек с датами в текстовом формате.
Вы выберите ячейку или диапазон ячеек с серийными номерами, а затем на вкладке Главная в группе Буфер обмена нажмите кнопку Копировать.
Сочетания клавиш: Можно также нажать CTRL+C.
Выделите ячейку или диапазон ячеек, которые содержат даты в текстовом формате, и на вкладке Главная в группе Буфер обмена нажмите стрелку под кнопкой Вставить и выберите команду Специальная вставка.
В диалоговом окне Специальная вставка в разделе Вставить выберите параметр Значения и нажмите кнопку ОК.
На вкладке Главная нажмите кнопку запуска всплывающее окно рядом с кнопкой Число.
В поле Категория выберите пункт Дата, после чего укажите необходимый формат даты в списке Тип.
Чтобы удалить порядковые номера после успешного преобразования всех дат, выберите ячейки, содержащие их, и нажмите кнопку DELETE.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.














