|
Преобразовать строку в дату (31 марта 2018 г.) | ☑ | ||
---|---|---|---|---|
0
illiona
naïve
14.03.18
✎
11:59
|
Всем добрый день. Помогите преобразовать строку вида "31 марта 2018 г." в дату
|
|||
1
shadow_sw
14.03.18
✎
12:03
|
разделить на части день месяц год, разделитель пробел
потом формат() |
|||
2
Гипервизор
14.03.18
✎
12:04
|
(1) Формат() на выходе дает строку, а нужна дата.
|
|||
3
exwill
14.03.18
✎
12:05
|
(0) Дата(2018,3,31)
|
|||
4
Гипервизор
14.03.18
✎
12:06
|
(3) Я ждал этого варианта! ))
|
|||
5
Малыш Джон
14.03.18
✎
12:07
|
(3) :)))
(0) а строка имеет фиксированный вид? |
|||
6
exwill
14.03.18
✎
12:09
|
(4) (5) Что вы смеетесь? Хороший ответ. Я бы даже сказал - наилучший. "... научи человека ловить рыбу..."
|
|||
7
mehfk
14.03.18
✎
12:11
|
(0) Выведи дату строкой и запроси у пользователя дату. Скажи что это защита от роботов - капча.
|
|||
8
illiona
naïve
14.03.18
✎
12:12
|
нет не фиксированный, просто как пример написала
|
|||
9
illiona
naïve
14.03.18
✎
12:13
|
может быть 1 марта 2018 г. , 2 марта 2018 г.
|
|||
10
exwill
14.03.18
✎
12:14
|
(9) Это и есть фиксированный вид.
|
|||
11
spectre1978
14.03.18
✎
12:15
|
(0) делите в массив по пробелам, потом ищете во втором элементе все возможные строковые наименования месяца и заменяете на соответствующее число ("марта" на "3"). Потом преобразуете все элементы к числу и делаете (3).
|
|||
12
spectre1978
14.03.18
✎
12:16
|
И если во входящих данных есть разные способы написания строки, например Март 02 2018, 2 марта 2018 и прочие, то вам придется изрядно помахаться и все равно не факт что всегда распознает верно.
|
|||
13
НЕА123
14.03.18
✎
12:17
|
стрДата = "31 марта 2018 г."
дата = Дата(СтрЗаменить(Стрзаменить(стрДата," марта ",".3."), "г.", "00:00:00")) |
|||
14
catena
14.03.18
✎
12:18
|
ДатаСтр = "31 марта 2018 г.";
ДатаНач = Дата(1800,1,1); Для ш=0 по 365000 Цикл ДатаТек = ДатаНач+60*60*24*ш; Если Формат(ДатаТек,"ДФ='дд ММММ гггг ''г.'''") = ДатаСтр Тогда Сообщить(ДатаТек); Прервать; КонецЕсли; КонецЦикла; |
|||
15
illiona
naïve
14.03.18
✎
12:18
|
вместо марта может быть апрель, т.е. любая дата в таком виде
|
|||
16
exwill
14.03.18
✎
12:19
|
(15) А сколько всего месяцев может быть?
|
|||
17
Малыш Джон
14.03.18
✎
12:21
|
(16) эмммм... ну вроде двенадцать, если ничего не поменялось...
|
|||
18
spectre1978
14.03.18
✎
12:22
|
я бы искал "январ", "феврал", "март", "апрел", {"май, мая"}, "июн", "июл", "август", "сентябр", "октябр", "ноябр", "декабр". При нахождении соответствующего куска подставлял бы номер месяца.
|
|||
19
spectre1978
14.03.18
✎
12:22
|
и естетственно без учета регистра
|
|||
20
Малыш Джон
14.03.18
✎
12:23
|
...запомнытэ, дэти, "вилька" и "тарелька" пишутся бэз мягкого знака...
|
|||
21
Малыш Джон
14.03.18
✎
12:24
|
(18) вроде как, кроме "января", "февраля" и т.д. там ничего не должно попадаться?
|
|||
22
spectre1978
14.03.18
✎
12:24
|
(20) на случай возможных написаний в именительном и и родительном падеже
|
|||
23
spectre1978
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 цифры год
|
|||
28
Tatitutu
14.03.18
✎
12:44
|
и не кто не спросил
а откуда ты берешь это строчку... из Excel так там .Value и .Text по разному отбображается т.е. в ячейке дата 31.03.2018 а отображается - "31 марта 2018 г." https://yadi.sk/d/sWSPwJq93TMVnZ а мы тут алгоритмы строчим - не разобравшись ))) |
|||
29
catena
14.03.18
✎
12:46
|
(28)Каков вопрос - таков ответ
|
|||
30
Малыш Джон
14.03.18
✎
12:47
|
(28) мы ж одинэсники) у нас задача - не разобраться, у нас задача - накодить)
|
|||
31
Tatitutu
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)Это ТС за "как надо" работающий код деньги платят, а нам задача интересна в абстрактном смысле:-)
|
|||
33
НЕА123
14.03.18
✎
12:54
|
(24)
>СтрДата = СтрЗаменить(стрДата," г.",""); без времени не работает Дата(). СтрДата = СтрЗаменить(стрДата," г.","00:00:00"); |
|||
34
Малыш Джон
14.03.18
✎
13:20
|
(33) да, ты прав
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |