Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Преобразовать строку в дату (31 марта 2018 г.)

Преобразовать строку в дату (31 марта 2018 г.)
Я
   illiona
 
14.03.18 - 11:59
Всем добрый день. Помогите преобразовать строку вида "31 марта 2018 г." в дату
 
 
   shadow_sw
 
1 - 14.03.18 - 12:03
разделить на части день месяц год, разделитель пробел
потом формат()
   Гипервизор
 
2 - 14.03.18 - 12:04
(1) Формат() на выходе дает строку, а нужна дата.
   exwill
 
3 - 14.03.18 - 12:05
(0) Дата(2018,3,31)
   Гипервизор
 
4 - 14.03.18 - 12:06
(3) Я ждал этого варианта! ))
   Малыш Джон
 
5 - 14.03.18 - 12:07
(3) :)))

(0) а строка имеет фиксированный вид?
   exwill
 
6 - 14.03.18 - 12:09
(4) (5) Что вы смеетесь? Хороший ответ. Я бы даже сказал - наилучший. "... научи человека ловить рыбу..."
   mehfk
 
7 - 14.03.18 - 12:11
(0) Выведи дату строкой и запроси у пользователя дату. Скажи что это защита от роботов - капча.
   illiona
 
8 - 14.03.18 - 12:12
нет не фиксированный, просто как пример написала
   illiona
 
9 - 14.03.18 - 12:13
может быть 1 марта 2018 г. , 2 марта 2018 г.
   exwill
 
10 - 14.03.18 - 12:14
(9) Это и есть фиксированный вид.
 
 Рекламное место пустует
   spectre1978
 
11 - 14.03.18 - 12:15
(0) делите в массив по пробелам, потом ищете во втором элементе все возможные строковые наименования месяца и заменяете на соответствующее число ("марта" на "3"). Потом преобразуете все элементы к числу и делаете (3).
   spectre1978
 
12 - 14.03.18 - 12:16
И если во входящих данных есть разные способы написания строки, например Март 02 2018, 2 марта 2018 и прочие, то вам придется изрядно помахаться и все равно не факт что всегда распознает верно.
   НЕА123
 
13 - 14.03.18 - 12:17
стрДата = "31 марта 2018 г."
дата = Дата(СтрЗаменить(Стрзаменить(стрДата," марта ",".3."), "г.", "00:00:00"))
   catena
 
14 - 14.03.18 - 12:18
ДатаСтр = "31 марта 2018 г.";
ДатаНач = Дата(1800,1,1);

Для ш=0 по 365000 Цикл
    ДатаТек = ДатаНач+60*60*24*ш;
    Если Формат(ДатаТек,"ДФ='дд ММММ гггг ''г.'''") = ДатаСтр Тогда
        Сообщить(ДатаТек);
        Прервать;
    КонецЕсли;    
КонецЦикла;
   illiona
 
15 - 14.03.18 - 12:18
вместо марта может быть апрель, т.е. любая дата в таком виде
   exwill
 
16 - 14.03.18 - 12:19
(15) А сколько всего месяцев может быть?
   Малыш Джон
 
17 - 14.03.18 - 12:21
(16) эмммм... ну вроде двенадцать, если ничего не поменялось...
   spectre1978
 
18 - 14.03.18 - 12:22
я бы искал "январ", "феврал", "март", "апрел", {"май, мая"}, "июн", "июл", "август", "сентябр", "октябр", "ноябр", "декабр". При нахождении соответствующего куска подставлял бы номер месяца.
   spectre1978
 
19 - 14.03.18 - 12:22
и естетственно без учета регистра
   Малыш Джон
 
20 - 14.03.18 - 12:23
...запомнытэ, дэти, "вилька" и "тарелька" пишутся бэз мягкого знака...
   Малыш Джон
 
21 - 14.03.18 - 12:24
(18) вроде как, кроме "января", "февраля" и т.д. там ничего не должно попадаться?
   spectre1978
 
22 - 14.03.18 - 12:24
(20) на случай возможных написаний в именительном и и родительном падеже
   spectre1978
 
23 - 14.03.18 - 12:26
(21) а вдруг. Иногда пишут в американской нотации Май 18, 2018. Мне попадалось.
   Малыш Джон
 
24 - 14.03.18 - 12:27
(0) как в (13) делать:

СтрДата = "31 марта 2018 г.";
СтрДата = СтрЗаменить(стрДата," января ",".1.");
СтрДата = СтрЗаменить(стрДата," февраля ",".2.");
СтрДата = СтрЗаменить(стрДата," марта ",".3.");
...
СтрДата = СтрЗаменить(стрДата," г.","");

Дата = Дата(СтрДата);
   Малыш Джон
 
25 - 14.03.18 - 12:27
(23) ну я про фиксированный вид не зря же спрашивал
   Рэйв
 
26 - 14.03.18 - 12:36
дат="1 января 2018";
спМес=Новый СписокЗначений;
спМес.Добавить("ЯНВАРЯ");
спМес.Добавить("ФЕВРАЛЯ");
спМес.Добавить("МАРТА");
спМес.Добавить("АПРЕЛЯ");
спМес.Добавить("МАЯ");
спМес.Добавить("ИЮНЯ");
спМес.Добавить("ИЮЛЯ");
спМес.Добавить("АВГУСТА");
спМес.Добавить("СЕНТЯБРЯ");
спМес.Добавить("ОКТЯБРЯ");
спМес.Добавить("НОЯБРЯ");
спМес.Добавить("ДЕКАБРЯ");

датПроверка=ВРЕГ(дат);
Мес=0;
Для Каждого Эл из спМес Цикл
    Мес=Мес+1;
    Если Найти(датПроверка,Эл.Значение)>0 Тогда
        Прервать;
    КонецЕсли;    
КонецЦикла;    
Мес=""+Мес;
Если СтрДлина(Мес)=1 Тогда
    Мес="0"+Мес;
КонецЕсли;    
Цифры="0123456789";
Год="";
День="";
Первый=Истина;
Для  н=1 по СтрДлина(дат) Цикл
    Сим=Сред(дат,н,1);
    Если Найти(Цифры,Сим)>0 Тогда
        Если Первый Тогда
            День=День+Сим;
            
        Иначе    
            Год=Год+Сим;
            Если СтрДлина(Год)=4 Тогда
                Прервать;
            КонецЕсли;    
        КонецЕсли;    
    Иначе
        Первый=Ложь;
    КонецЕсли;    
Конеццикла;    
Если СтрДлина(День)=1 Тогда
    День="0"+День;
КонецЕсли;    
Дат=Дата(Год+Мес+День)    ;
Сообщить("->"+Дат);
   Рэйв
 
27 - 14.03.18 - 12:37
только формат должен быть фиксированный - сначала цифрой день, потом строкой месяц,потом 4 цифры год
   Tatitutu
 
28 - 14.03.18 - 12:44
и не кто не спросил

а откуда ты берешь это строчку...

из Excel

так там .Value и .Text
по разному отбображается

т.е. в ячейке дата 31.03.2018
а отображается - "31 марта 2018 г."

https://yadi.sk/d/sWSPwJq93TMVnZ

а мы тут алгоритмы строчим - не разобравшись )))
   catena
 
29 - 14.03.18 - 12:46
(28)Каков вопрос - таков ответ
   Малыш Джон
 
30 - 14.03.18 - 12:47
(28) мы ж одинэсники) у нас задача - не разобраться, у нас задача - накодить)
   Tatitutu
 
31 - 14.03.18 - 12:48
+(28)
т.е (0) скорее всего обработывает данные из EXCEL

....
Нужнаядата = Cells(10,25).text ;

получает "31 марта 2018 г." тип Строка
и теперь пытается с помощью всемирного разума преврать
строку в дату
....

Нужнаядата = Cells(10,25).value ;

получишь '31.03.2018' - тип дата
   Рэйв
 
32 - 14.03.18 - 12:48
(28)Это ТС за "как надо" работающий код деньги платят, а нам задача интересна в абстрактном смысле:-)
   НЕА123
 
33 - 14.03.18 - 12:54
(24)
>СтрДата = СтрЗаменить(стрДата," г.","");

без времени не работает Дата().
СтрДата = СтрЗаменить(стрДата," г.","00:00:00");
 
 
   Малыш Джон
 
34 - 14.03.18 - 13:20
(33) да, ты прав


Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует