Имя: Пароль:
1C
 
Как преобразовать строку вида "2021-03-09T17:17:54" в дату
,
0 АртемП
 
10.03.21
15:27
Есть ли простой механизм ? Или пример?
Это типовой ответ сторонней программы - показывает момент времени.
Собственно строка момента времени вообще имеет вид:
     datetime="2021-03-09T17:17:54.620+03:00"

Собственно строку можно преобразовать к виду "2021-03-09 17:17:54" но наверно это не сильно поможет
1 RomanYS
 
10.03.21
15:32
(0) XMLЗначение(Тип("Дата"),"2021-03-09T17:17:54.620+03:00")    
только сеунды округлятся до 09.03.2021 17:17:55
2 AlvlSpb
 
10.03.21
15:32
(0) Собственно строку можно преобразовать к виду "2021-03-09 17:17:54"©
Преобразовывай, а потом СтрЗаменить меняешь дефис на точку и Дата(ТвояСтрока) получишь дату
3 acht
 
10.03.21
15:33
(0) Результат = Дата("20210309171754")
4 AlvlSpb
 
10.03.21
15:34
5 acht
 
10.03.21
15:34
А хотя в (1) правильней, так еще часовой пояс учется. А вот как его понимать - пусть у ТС голова болит
6 asady
 
10.03.21
15:35
ТвояДата = ПрочитатьДатуJSON(ДатаСтрокой, ФорматДатыJSON.ISO);
7 АртемП
 
10.03.21
15:36
спасибо всем!
8 dka80
 
10.03.21
15:36
СтроковыеФункцииКлиентСервер.СтрокаВДату
9 acht
 
10.03.21
15:38
(7) Ты только еще учти, что, например, "2021-03-09T17:17:54.620+04:00" при приведении на сервере, находящемся в московском часовом поясе даст не 17:17, а 16.17 =)
10 PR
 
10.03.21
15:40
(0) XMLЗначение(Тип("Дата"), ТвояДатаСтрокой)
11 acht
 
10.03.21
15:41
(10) Даже до первого сообщения не дочитал, так торопился...
12 PR
 
10.03.21
16:10
(11) А, да, че-то все прочитал, но отвлекся, а потом почему-то увидел только (6)
13 НЕА123
 
10.03.21
17:38
Дата(СтрСоединить(стрРазделить(стрРазделить("2021-03-09T17:17:54.620+03:00",".")[0],"-T:")))
14 acht
 
10.03.21
20:01
(13) Слабак.

ДатаСтрокой = "2021-03-09T17:17:54.620+03:00";

Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |   ДОБАВИТЬКДАТЕ(
    |   ДОБАВИТЬКДАТЕ(
    |   ДОБАВИТЬКДАТЕ(
    |   ДОБАВИТЬКДАТЕ(
    |   ДОБАВИТЬКДАТЕ(
    |   ДОБАВИТЬКДАТЕ(
    |   ДАТАВРЕМЯ(3999, 1 ,1),
    |   ГОД,
    |   СУММА(
    |         1000 * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 1, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 100  * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 2, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 10   * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 3, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 1    * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 4, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |   ) - 3999
    |   ), МЕСЯЦ,
    |   СУММА(
    |         10 * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 6, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 1  * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 7, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |   ) - 1
    |   ), ДЕНЬ,
    |   СУММА(
    |         10 * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 9,  1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 1  * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 10, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |   ) - 1
    |   ), ЧАС,
    |   СУММА(
    |         10 * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 12, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 1  * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 13, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |   )
    |   ), МИНУТА,
    |   СУММА(
    |         10 * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 15, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 1  * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 16, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |   )
    |   ), СЕКУНДА,
    |   СУММА(
    |         10 * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 18, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |       + 1  * ЕСТЬNULL(ВЫБОР ПОДСТРОКА(&ДатаСтрокой, 19, 1) КОГДА ЦифрыЧисел.Цифра ТОГДА ЦифрыЧисел.Число КОНЕЦ, 0)
    |   )
    |   ) КАК ДатаДатой
    |ИЗ
    |(
    |   ВЫБРАТЬ ""0"" КАК Цифра, 0 КАК Число
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""1"", 1
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""2"", 2
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""3"", 3
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""4"", 4
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""5"", 5
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""6"", 6
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""7"", 7
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""8"", 8
    |   ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""9"", 9
    |) КАК ЦифрыЧисел
    |");
Запрос.УстановитьПараметр("ДатаСтрокой", ДатаСтрокой);

ДатаДатой = Запрос.Выполнить().Выгрузить()[0].ДатаДатой;
Сообщить(ДатаДатой);
15 RomanYS
 
10.03.21
20:12
(14) что-то слабо верится что это работает
"КОГДА ЦифрыЧисел.Цифра..." преобразование к булево где?
16 acht
 
10.03.21
20:35
(15) Ты при помощи веры, что-ли программируешь?
Вот сейчас заодно и уровень знаний языка запросов раскроется.
17 ДенисЧ
 
10.03.21
20:45
Весна, что-ли? У нас ещё морозы, а у вас уже обострение...
18 RomanYS
 
10.03.21
20:57
(16) Дичь полная... но работает))
19 Йохохо
 
10.03.21
21:50
20 RomanYS
 
10.03.21
23:27
(19) ага, но это только половина дичи))
Вторая половина это группировка и сумма()
21 Ненавижу 1С
 
гуру
10.03.21
23:54
22 RomanYS
 
11.03.21
00:15
(21) да фиг с ним с кейсом, хотя такое раньше на 1с не видел, в доку лезть пока лень...
Применение СУММА() там гораздо интереснее с выборкой из одной таблицы цифр
23 KoalaJustKoala
 
11.03.21
05:29
(14) Чего чего можно с запросом натворить?
Гм....
Мощненько...