Имя: Пароль:
1C
 
Как преобразовать строку типа "23.05.2022" в дату в 1с.
0 alekosansey
 
01.06.22
11:20
Как преобразовать строку типа "23.05.2022" в дату в 1с. Пишу Дата("23.05.2022") говорит что невозможно преобразовать. Как преобразовать правильно в формат дата строку. Заранее огромное спасибо
1 Ненавижу 1С
 
гуру
01.06.22
11:24
(0) начнем с того, откуда вы эту строку взяли
2 alekosansey
 
01.06.22
11:24
c текстового документа
3 NorthWind
 
01.06.22
11:25
Ну есть же конструктор Дата (ДД, ММ, ГГГГ) или как-то так?
Тогда Дата (Лев (Строка, 2), Сред (Строка, 3, 2), Прав (Строка, 4).
4 NorthWind
 
01.06.22
11:26
пардон, Сред (Строка, 4, 2). Ну вы поняли.
5 Kassern
 
01.06.22
11:26
(3) год вначале)
6 Kassern
 
01.06.22
11:26
А вообще можно попробовать xmlЗначение(Дата)
7 NorthWind
 
01.06.22
11:27
(5) я не помню точно. Поэтому и написал "или как-то так"
8 Dmitrii
 
гуру
01.06.22
11:29
(0) Напиши так.


Дата("23.05.2022 00:00:00");

или так (тоже самое)

Дата("23.05.2022" + " 00:00:00");
9 Dmitrii
 
гуру
01.06.22
11:30
+ к (8) Только учти, что это недокументированная особенность работы функции Дата().
10 alekosansey
 
01.06.22
11:34
6 Не работает
11 alekosansey
 
01.06.22
11:35
8 Спасибо самый удобный вариант
12 Кир Пластелинин
 
01.06.22
11:36
(3) имхо безопасней ориентироваться на "разделитель" частей даты. а то мало ли вдруг окажется, что вместо 01.12.22 будет 1.12.22
13 vs7719
 
01.06.22
11:53
ЗначениеДаты = ОбщегоНазначенияКлиентСервер.СтрокаВДату("23.05.2022");
14 vis_tmp
 
01.06.22
11:55
(13) Это в какой конфигурации?
15 vs7719
 
01.06.22
12:00
(14) это из БСП, так что функция может быть в актуальных конфигурациях.
16 vs7719
 
01.06.22
12:01
17 Конструктор1С
 
01.06.22
12:40
(13) ток там, вроде бы, СтроковыеФункцииКлиентСервер.СтрокаВДату(), хотя могли и в ОН пробросить
18 NorthWind
 
01.06.22
12:41
(12) да, это разумно.
19 NorthWind
 
01.06.22
12:42
(17) на худой конец, даже в глобальниках старых конф на 7.7, не говоря уже о восьмерочных, всегда присутствовала функа, которая дербанила куски из строки с разделителями. А сейчас, кажись, уже и в платформе есть. Дальше дело техники.
20 timurhv
 
01.06.22
12:42
(17) это в старой БСП
21 Злопчинский
 
01.06.22
15:39
(0) Переходи на 7.7 - там Дата("ДД.ММ.ГГГГ")- работает...
22 yopQua
 
01.06.22
16:10
(21) +1, люто)
23 1Сергей
 
01.06.22
16:13
Шах и мат, снеговички)
24 Волшебник
 
модератор
01.06.22
16:14
(21) Какой изврат...
25 yopQua
 
01.06.22
16:35
(23) всмысле лютый +1, топлю за такой вариант
26 MWWRuza
 
гуру
01.06.22
22:45
+(23) Ага... Для меня, это тоже было дико... Когда привык к тому, что в (21), и, казалось бы в снеговике должно быть не меньше возможностей по преобразованию значений... Ан нет :-)
27 ДедМорроз
 
01.06.22
22:48
Я во всех языках пишу свой конвертер,т.к.потом ловить глюки смены региональных настроек и т.п.очень не хочется.
Ну и отличить первый год от первого дня тоже достаточно просто,если он 4 цифры.
28 Злопчинский
 
02.06.22
01:19
Дата("29.06.2022")
Дата("29\06\2022")
Дата("29/06/2022")
Дата("29-06-2022")
29 NorthWind
 
02.06.22
06:45
(26) в снеговике тип даты сделан правильно, как в других языках, в отличие от клюшек, где он урезанный, без времени. Поэтому вполне логично что есть некоторые отличия.
30 Kigo_Kigo
 
02.06.22
08:35
(29) Да, но такую элементарщину как Дата("23.05.2022") он же должен понимать? и если я так пишу, то я ИМХО подразумеваю что это начало дня, это вангую вопрос про время
31 DEVIce
 
02.06.22
09:47
Такое ощущение, что большинство участников ветки первый раз 1С увидели. Вопрос в (0) и ответы на него - это же база базная. Как можно такие вещи не знать? Ну ладно никто не помнит все константы наизусть, но блин в СП то можно посмотреть и простейший алгоритм преобразования строки в параметры для метода Дата пишется в одну строку. Про БСП вообще молчу.
32 yopQua
 
02.06.22
09:59
боль и унижение
33 Garykom
 
гуру
02.06.22
10:15
(30) а такую Дата("23.05.22") тоже должен?
Не подскажешь тут что год а что число?
34 yopQua
 
02.06.22
10:32
(33) это одиннадцать часов вечера
35 Kigo_Kigo
 
02.06.22
11:13
(33) А так Дата("23.05.22 00:00:01") ?
36 ДедМорроз
 
03.06.22
21:35
Формата с двумя цифрами года и годом вначале не было.
Тут можно считать,что год всегда в конце,а вот месяц и день - в зависимости от разделителей.
37 Злопчинский
 
04.06.22
09:39
а в клюшках (28) отработает....
38 Злопчинский
 
04.06.22
09:40
(31) "можно посмотреть и простейший алгоритм преобразования строки в параметры для метода Дата пишется в одну строку."
в одну строку писать бяка, его отлаживать тяжело...
39 Гений 1С
 
гуру
04.06.22
13:25
у меня есть в списке шаблонов функции на этот счет

Функция СтрокаДаты_ДД_ММ_ГГГГ_ВДату(Строка)
    Д = Число(Сред(Строка, 1, 2));
    М = Число(Сред(Строка, 4, 2));
    Г = Число(Сред(Строка, 7, 4));
    Возврат Дата(Г, М, Д);
    
КонецФункции

Функция СтрокаДаты_ГГГГ_ММ_ДД_ВДату(Строка)
    Д = Число(Сред(Строка, 9, 2));
    М = Число(Сред(Строка, 6, 2));
    Г = Число(Сред(Строка, 1, 4));
    Возврат Дата(Г, М, Д);
    
КонецФункции
40 Злопчинский
 
04.06.22
14:28
(39) фу, какая гадость.
две эти функции объединяет общее - наличие разделителей.
прямую или реверсную запись можно определить позицией первого разделителя.
.
надо было еще выделение оставных частей даты в отдельные функции оформить...
41 Гений 1С
 
гуру
04.06.22
14:38
(40) перфекционизм - зло. Когда четко знаешь формат, лишние анализы только замедляют выполнение программы. А если тебе нужен анализатор, прикрути функцию разобратьАнализируяФормат, ггг
42 Злопчинский
 
04.06.22
14:53
(41) "перфекционизм - зло." - согласен.
Обратная сторона плохо.
"Когда четко знаешь формат" - кто знает? ты? а почему ты знаешь и я обязан знать?
вполне достаточно "знать" что дата в типовом четырехгодовом формате с разделителями. обычно так бывает.

МояДата = ПолучитьДатуБезГеморроя(датаСтрокой);
43 Гений 1С
 
гуру
04.06.22
17:44
(42) ну например, когда я импортировал из ZOHO BOOKS я точно знал формат даты в API, тогда как раз и написал эти функции. Еще вопросы, сэр?
44 Злопчинский
 
04.06.22
17:56
(43) Носэр!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс