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

Как преобразовать дату в формат 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 |  Дата:   Прочитано: 3433
 0 
Распечатать
Возможно, вас также заинтересует
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 2
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р,...
COM-подключение к базе 7.7 из 8.2 1С 4
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе="...
В учетной политике не указан вид тарифа страховых взносов. Как указать? 0
Создайте новую запись учетной политики с начала года - Например 01.01.2013 В учетной смотрите дату начала учетной политики. Поставьте дату начала года (например 01.01.13) закладка появиться должна. Проверьте Тариф страховых...
Ввести дату, ввод даты 1
ДатаНапоминания = РабочаяДата; Подсказка = "Введите дату и время"; ЧастьДаты = ЧастиДаты.ДатаВремя; Если ВвестиДату(ДатаНапоминания, Подсказка, ЧастьДаты) Тогда // обработка даты напоминания КонецЕсли Если...
Ввод договоров ГПХ в ЗУП (счет 76) 5
Часто меня спрашивают: Как правильно отразить договор ГПХ в ЗУП? Ниже небольшая, последовательная инструкция: Прием на работу Сведения о физическом лице, выполняющем работы по договору подряда, должны быть внесены...
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.