helpf.pro
Регистрация
 0 
Распечатать

1С 8.3 : Как преобразовать дату в формат RFC 822 и обратно?

Создавая обмены данными между 1С и сайтами, часто приходится форматировать вывод даты в стандарт RCF-822 или преобразовывать его в понятную для 1С ДатуВремя.

Дата в формате RFC-822 выглядит так: Tue, 12 Aug 2013 14:15:00 +0400 

Небольшая справка по стандартам:

Как дату перевести в формат RFC-822?

Код 1C v 8.2 УП
 

ДатаВФорматеRFC822 = Формат(ТекущаяДата(),"Л=en_US; ДФ='ddd, dd MMM yyyy hh:mm:ss +0400 '");

Как из формата RFC-822 получить дату и время для 1С?

Код 1C v 8.2 УП
 

// Функция преобразовывает дату в формате RFC822 к формату 1С - дата и время

// Параметры

// ДатаВФорматеRFC822 – Строка вида "Thu, 10 Aug 2006 14:48:27 +0400"

// Возвращаемое значение:

// <Дата> – Результат преобразования или Неопределено, если преобразование не удалось

Функция ПреобразоватьRFC822КДате0(ДатаВФорматеRFC822) Экспорт

КопияСтроки = ДатаВФорматеRFC822;

СтруктураДаты = Новый Структура("Год,Месяц,День,Час,Минута,Секунда", "","","","","","");

Месяцы = Новый Структура("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "01","02","03","04","05","06","07","08","09","10","11","12");

Для каждого КлючИЗначение Из Месяцы Цикл

Позиция = Найти(КопияСтроки,КлючИЗначение.Ключ);

Если Позиция > 0 Тогда

СтруктураДаты.Месяц = КлючИЗначение.Значение;

Прервать;

КонецЕсли;

КонецЦикла;

Состояние = 0;

Для ш=0 По СтрДлина(КопияСтроки) Цикл

ТекущийСимвол = ПолучитьСимвол(КопияСтроки, ш);

ТекСимволЦифра= ЭтоЦифра(ТекущийСимвол);

Если ТекСимволЦифра И Состояние = 0 Тогда

СтруктураДаты.День = СтруктураДаты.День + ТекущийСимвол;

Состояние = 1; //начало день

ИначеЕсли ТекСимволЦифра И Состояние = 1 Тогда

СтруктураДаты.День = СтруктураДаты.День + ТекущийСимвол;

Состояние = 2; //ждем год

ИначеЕсли ТекСимволЦифра И Состояние = 2 Тогда

СтруктураДаты.Год = СтруктураДаты.Год + ТекущийСимвол;

Состояние = 3; //продолжаем год

ИначеЕсли ТекСимволЦифра И Состояние = 3 Тогда

СтруктураДаты.Год = СтруктураДаты.Год + ТекущийСимвол;

ИначеЕсли ТекущийСимвол = " " И Состояние = 3 Тогда

Состояние = 4; //дальше час

ИначеЕсли ТекСимволЦифра И Состояние = 4 Тогда

СтруктураДаты.Час = СтруктураДаты.Час + ТекущийСимвол;

ИначеЕсли ТекущийСимвол = ":" И Состояние = 4 Тогда

Состояние = 5; //дальше минута

ИначеЕсли ТекСимволЦифра И Состояние = 5 Тогда

СтруктураДаты.Минута = СтруктураДаты.Минута + ТекущийСимвол;

ИначеЕсли ТекущийСимвол = ":" И Состояние = 5 Тогда

Состояние = 6; //дальше секунда

ИначеЕсли ТекСимволЦифра И Состояние = 6 Тогда

СтруктураДаты.Секунда = СтруктураДаты.Секунда + ТекущийСимвол;

ИначеЕсли ТекущийСимвол = " " И Состояние = 6 Тогда

Прервать;

КонецЕсли;

КонецЦикла;

Попытка

Результат = Дата(СтруктураДаты.Год+СтруктураДаты.Месяц+СтруктураДаты.День

+СтруктураДаты.Час+СтруктураДаты.Минута+СтруктураДаты.Секунда);

Исключение

Результат = Неопределено;

КонецПопытки;

Возврат Результат;

КонецФункции // ПреобразоватьRFC822КДате()

В процессе изучения вопроса, встретил еще несколько вариантов:

Код 1C v 8.х
  // Автор: Mavka 
// По типу: Wed, 30 Mar 2011 17:50:11 +0200 
// Я написала код, но без учета часовых поясов( 
Функция ВДатуRFC822(Дата1С, ПоправкаGMT) Экспорт
    Перем ТемпДата;
    Перем ТемпГод;
    Перем ТемпМесяц;
    Перем ТемпДень;
    Перем ДатаRFC822;
    Перем ТемпЧас;
    Перем ТемпМинута;
    Перем ТемпСекунда;
    Перем НомерДняНедели;
    Перем ТемпДеньНедели;
    Перем МесяцИмя;
    ТемпДата = Дата1С - 60 * 60 * ПоправкаGMT;
    ТемпГод = СтрЗаменить(Формат(Год(ТемпДата),"ND=4; NLZ="),Символы.НПП,"");
    ТемпМесяц = Месяц(ТемпДата);
    Если ТемпМесяц = 1 Тогда
         МесяцИмя = "Jan";
     ИначеЕсли ТемпМесяц = 2 Тогда
         МесяцИмя = "Feb";
     ИначеЕсли ТемпМесяц = 3 ТОгда
         МесяцИмя = "Mar";
     ИначеЕсли ТемпМесяц = 4 Тогда
         МесяцИмя = "Apr";
     ИначеЕсли ТемпМесяц = 5 Тогда 
         МесяцИмя = "May";
     ИначеЕсли ТемпМесяц = 6 Тогда
         МесяцИмя = "Jun";
     ИначеЕсли ТемпМесяц = 7 Тогда
         МесяцИмя = "Jul";
     ИначеЕсли ТемпМесяц = 8 ТОгда
         МесяцИмя = "Aug";
     ИначеЕсли ТемпМесяц = 9 Тогда
         МесяцИмя = "Sep";
     ИначеЕсли ТемпМесяц = 10 Тогда 
         МесяцИмя = "Oct";
     ИначеЕсли ТемпМесяц = 11 Тогда
         МесяцИмя = "Nov";
     Иначе        
         МесяцИмя = "Dec";
    КонецЕсли;
    ТемпДень = Формат(День(ТемпДата),"ND=2; NLZ=");
    НомерДняНедели = ДеньНедели(ТемпДата);
    Если НомерДняНедели = 1 Тогда
         ТемпДеньНедели = "Mon";
     ИначеЕсли НомерДняНедели = 2 Тогда
         ТемпДеньНедели = "Tue";
     ИначеЕсли НомерДняНедели = 3 ТОгда
         ТемпДеньНедели = "Wed";
     ИначеЕсли НомерДняНедели = 4 Тогда
         ТемпДеньНедели = "Thu";
     ИначеЕсли НомерДняНедели = 5 Тогда 
         ТемпДеньНедели = "Fri";
     ИначеЕсли НомерДняНедели = 6 Тогда
         ТемпДеньНедели = "Sat";
     Иначе        
         ТемпДеньНедели = "Sun";
    КонецЕсли;
    
        ТемпЧас = ?(Час(ТемпДата) = 0, "00", Формат(Час(ТемпДата),"ND=2; NLZ="));
        ТемпМинута = ?(Минута(ТемпДата) = 0, "00", Формат(Минута(ТемпДата),"ND=2; NLZ="));
        ТемпСекунда = ?(Секунда(ТемпДата) = 0, "00", Формат(Секунда(ТемпДата),"ND=2; NLZ="));
        ДатаRFC822 = ТемпДеньНедели+ ", " + ТемпДень + " " + МесяцИмя + " " + ТемпГод + " " + ТемпЧас + ":" + ТемпМинута + ":" + ТемпСекунда + " +0200";
    
    Возврат ДатаRFC822;
КонецФункции
Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 16237
 0 
Распечатать
Возможно, вас также заинтересует
Ввод договоров ГПХ в ЗУП (счет 76) 9
Часто меня спрашивают: Как правильно отразить договор ГПХ в ЗУП? Ниже небольшая, последовательная инструкция: Прием на работу Сведения о физическом лице, выполняющем работы по договору подряда, должны быть внесены в справочник Сотрудники организ
Выгрузка картинок из базы 1С в XML 2
В нынешнее время для электронного каталога или интернет-магазина необходимо выгружать не только информацию о цене и характеристиках товара, но и сопутствующие изображения. Хранящиеся в базе или связанные с номенклатурой изображения порой приходилось
Загрузка данных в 1С из PDF 5
В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла... И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С. Чтение PDF файлов из 1С Первым дело я стал
ЗаписатьДатуJSON() в 1С 8.3: 0
Процедура ПреобразованиеДатыВДатуJSON() // Пример: 12.08.2023 09:15:29 ТестДата = Дата("20230812091529"); // Вариант записи - "ЛокальнаяДата" // Локальная дата без указания часового пояса. // // Преобразует дату в "2023-08-12T09:15:29
Как в СКД вывести дату и время формирования отчета? 7
Есть несколько вариантов вывода информации перед основным отчетом,какой лучше?! - зависит от задачи: Допустим нам нужно вывести дату и время формирования отчета и свою шапку отчета, например так: Варианты решения: 1. Использование группиров
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.