Имя: Пароль:
1C
 
8.3. Можно ли получить дату из строки по формату
,
0 SeiOkami
 
18.01.19
09:28
Добрый день.

Представьте, что это академический вопрос. Чтобы не засыпали левыми вопросами "а зачем?".

Имеем дату. Её преобразовываем по формату в строку. Можно ли потом, имея строку и формат, получить обратно дату? Как-то платформенно
1 ДенисЧ
 
18.01.19
09:31
Зависит от формата
2 PuhUfa
 
18.01.19
09:32
(0) формат видимо не типовой?
3 SeiOkami
 
18.01.19
09:32
формат - это функция Формат() в 1с
4 SeiOkami
 
18.01.19
09:33
Т.е. 1С сама мне дату в строку преобразовала. А вот может ли обратно?)
5 ZDenis
 
18.01.19
09:34
(4) Разбираешь строку на составляющие и преобразуешь.
6 SiAl-chel
 
18.01.19
09:34
(0) Можно. Но писать долго.
СтрРазделить() - массив со строковыми значениями года, месяца и т.д,
Число() - конвертация значений года, месяца и т.д. в числа
Дата() - параметры - значения года, месяца и т.д, возвращает дату.
7 SeiOkami
 
18.01.19
09:35
(5), это когда ты пишешь код под точную форматную строку. А речь о том, чтобы можно было её передать. Любую, которая понимает платформа 1С.
8 ДенисЧ
 
18.01.19
09:36
(7) Формат(ТекущаяДата(), "ДФ=гггг")
Такую ты точно в исходную дату не преобразуешь никак.
Штатно 1с понимает только тот формат, который описан в СП в разделе "преобразование данных"
9 SeiOkami
 
18.01.19
09:37
Ещё раз попробую объяснить.

В платформе есть функция
   Строка = Формат(Значение, ФорматнаяСтрока);

Она может дату превратить в строку по форматной строке (то бишь формуле).

Но есть ли метод у платформы, который потом может сделать обратное?
Или какая-нить хитрость, которой это можно сделать.
10 НЕА123
 
18.01.19
09:37
(7)
ну передал "январь". какая дата?
11 SeiOkami
 
18.01.19
09:38
(8), речь именно о поддержимуемых форматных строках
12 d4rkmesa
 
18.01.19
09:38
(10) Хе-хе, 01010001
13 ДенисЧ
 
18.01.19
09:39
(11) А я что, написал неподдерживаемую?
14 PuhUfa
 
18.01.19
09:40
(7) >>А речь о том, чтобы можно было её передать. Любую, которая понимает платформа 1С.

Ну и передавай те который понимает платформа
Глобальный контекст (Global context)
Дата (Date)
Вариант синтаксиса: По строке

Синтаксис:

Дата(<Значение>)
Параметры:

<Значение> (обязательный)

Тип: Строка.
Исходное значение даты.
Строка должна содержать дату в локальном формате даты или в каноническом виде YYYYMMDDHHMMSS.
Описание варианта метода:

При преобразовании строка должна содержать дату в каноническом формате "ГГГГММДДччммсс" (см. раздел "Примитивные типы данных").
Вариант синтаксиса: По составляющим

Синтаксис:

Дата(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>)
Параметры:

<Год> (обязательный)

Тип: Число.
Год даты.
<Месяц> (обязательный)

Тип: Число.
Месяц даты.
<День> (обязательный)

Тип: Число.
День даты.
<Час> (необязательный)

Тип: Число.
Час даты.
<Минута> (необязательный)

Тип: Число.
Минута даты.
<Секунда> (необязательный)

Тип: Число.
Секунда даты.
Описание варианта метода:

Допускаются следующие формы задания параметров:
Дата(Год, Месяц, День);
Дата(Год, Месяц, День, Час, Минута, Секунда);
Возвращаемое значение:

Тип: Дата.

Описание:

Преобразует полученный параметр (параметры) в значение типа Дата.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:

Дата("19840326062421");
Дата(1984,03,26,06,24,21);
15 SeiOkami
 
18.01.19
09:41
(14), речь о форматной строке.
"ДФ=dd.MM.yyyy"
"ДФ=d.M.yy"
"ДФ=yyyy-MM-dd"

и т.д.
16 Мыш
 
18.01.19
09:45
(0) Нет.
17 PuhUfa
 
18.01.19
09:48
(15) ты уж определить... у тебя строка с датой в формате " которая понимает платформа 1С" или в любом другом формате...
То что ты приводишь:
"ДФ=dd.MM.yyyy"
"ДФ=d.M.yy"
"ДФ=yyyy-MM-dd"
Это просто готовые шаблоны а не канонический формат понимаемый 1С. В этих шаблонах ты можешь сам навертеть что хочешь, например: "dd^^MMMM^^yyyy"
18 SeiOkami
 
18.01.19
09:51
(17), это форматная строка, которую понимает 1С. Это ею же сгенерированная форматная строка. Я только о таких и говорю
19 SeiOkami
 
18.01.19
09:52
(17)
"В этих шаблонах ты можешь сам навертеть что хочешь, например: "dd^^MMMM^^yyyy""

И эту форматную строку тоже понимает 1С. И может преобразовать по ней данные
20 НЕА123
 
18.01.19
09:52
функция антиформат(СтрокаДаты, Форматнаястрока)
// возвращает дату


осталось написать...
21 ZDenis
 
18.01.19
09:53
(18) В (8) и в (10) тоже "сгенерированная форматная строка"

12-01-18
Это - 12 января 2018 года
или  18 января 2012 года ?
22 ДенисЧ
 
18.01.19
09:53
(19) Во...
Формат(ТекущаяДата(), "ДЛФ=DD");

Тоже сформировалась автоматом из конструктора форматной строки
23 SeiOkami
 
18.01.19
09:54
(21), завасит от форматной строки
24 SeiOkami
 
18.01.19
09:54
(22), верно. и 1С может по ней превратить дату в строку
25 ДенисЧ
 
18.01.19
09:58
(24) Попробуй сам

    стрдт = Формат(ТекущаяДата(), "ДЛФ=DD");
    сообщить(стрдт);
    Попытка
        Дт = Дата(стрДт);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    сообщить(дт);
26 SeiOkami
 
18.01.19
10:04
(25), лол, понятно, что этот метод имеет другие входящие данные
27 ДенисЧ
 
18.01.19
10:05
(26) Какой метод? Я тебе показал платформенное преобразование, о чём ты и спрашивал
28 catena
 
18.01.19
10:13
Функция антиформат(СтрокаДаты,ФорматнаяСтрока)
дд = Дата(1900,1,1);
ддф = Формат(дд,ФорматнаяСтрока);
Пока СтрокаДаты<>ддф Цикл
    ОбработкаПрерыванияПользователя();
    дд=дд+60*60*24;
    ддф=Формат(дд,ФорматнаяСтрока);
КонецЦикла;    
Возврат(дд);
29 SeiOkami
 
18.01.19
10:14
(27), я спрашивал о возможности обратного преобразования по форматной строке.

Строка = Формат(Дата, ФорматнаяСтрока);

Дата = АнтиФормат(Строка, ФорматнаяСтрока);
30 ДенисЧ
 
18.01.19
10:14
(29) Ты синтакс-помощник открывал? Видел там такую функцию?
31 SeiOkami
 
18.01.19
10:15
(28), а это крутая идея))
32 SeiOkami
 
18.01.19
10:15
(28), интересно, как быстро цикл ляжет
33 Вафель
 
18.01.19
10:29
можно через .net