|   |   | 
| 
 | 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     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |