|
Как из строки "Март 2012" получить Дату? | ☑ | ||
---|---|---|---|---|
0
ProgaN
05.04.12
✎
07:00
|
Как строку "Март 2012" привести к типу Дата с минимальным количеством строк кода (наиболее оптимально)?
|
|||
1
Рэйв
05.04.12
✎
07:06
|
Дат=Дата(Число(Прав("Март 2012",4)),1,1,0,0,0);
|
|||
2
Рэйв
05.04.12
✎
07:07
|
вернее
Дат=Дата(Число(Прав("Март 2012",4)),3,1,0,0,0) |
|||
3
Cube
05.04.12
✎
07:08
|
(0) 1). Отрезаешь последние 4 символа.
2). Удаляешь пробелы в начале и конце. 3). Сравниваешь полученную строку со строками "Январь", "Февраль" и т.д., получаешь номер месяца. 4). А потом СП: Синтаксис: Дата(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>) Параметры: <Год> (обязательный) Тип: Число. Год даты. <Месяц> (обязательный) Тип: Число. Месяц даты. <День> (обязательный) Тип: Число. День даты. <Час> (необязательный) Тип: Число. Час даты. <Минута> (необязательный) Тип: Число. Минута даты. <Секунда> (необязательный) Тип: Число. Секунда даты. |
|||
4
Chai Nic
05.04.12
✎
07:09
|
---
Если Строка="Март 2012" тогда ЗначениеДата=Дата(2012,3,1) КонецЕсли --- Задача выполнена :) |
|||
5
Cube
05.04.12
✎
07:09
|
(4) Зачет!))
|
|||
6
ptrtss
05.04.12
✎
07:13
|
Во, я тоже написал вариант
Месяцы = Новый Соответствие; Для н = 1 по 12 Цикл Месяцы[Формат(Дата(1, н, 1), "ДФ=ММММ")] = н; КонецЦикла; Дата(Сред(Строка, Найти(Строка, " ") + 1), Месяцы[Лев(Строка, Найти(Строка, " ") - 1)], 1); |
|||
7
МастерВопросов
05.04.12
✎
07:13
|
в типовых же есть уже написанная фунция ПолучитьДатуИзСтроки() как то так...
|
|||
8
ProgaN
05.04.12
✎
07:16
|
Не воспринимайте условия задачи буквально. )))
Конечно, "март 2012" - это пример. То есть в строке месяц и год строкой через пробел. |
|||
9
ProgaN
05.04.12
✎
07:18
|
(7) Не подходит
// Возвращает дату из строки в формате ЧЧ.ММ.ГГГГ // Функция ПолучитьДатуИзСтроки(Строка) Экспорт Возврат Дата(Сред(Строка, 7, 4)+Сред(Строка, 4, 2)+Лев(Строка, 2)); КонецФункции |
|||
10
МастерВопросов
05.04.12
✎
07:19
|
(7)
// Предназначена для реализации "произвольного" ввода даты-месяца // подбирает по переданному тексту строку-представление даты или список таких строк // в переданный параметр ДатаПоТексту возвращает подобранную по тексту дату Функция ДатаКакМесяцПодобратьДатуПоТексту(Текст, ДатаПоТексту = НеОпределено) ЭКспорт СписокВозврата = Новый СписокЗначений; ТекущийГод = Год(ТекущаяДата()); Если ПустаяСтрока(Текст) Тогда Возврат СписокВозврата; КонецЕсли; Если Найти(Текст, ".") <> 0 Тогда Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, "."); ИначеЕсли Найти(Текст, ",") <> 0 Тогда Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, ","); ИначеЕсли Найти(Текст, "-") <> 0 Тогда Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, "-"); ИначеЕсли Найти(Текст, "/") <> 0 Тогда Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, "/"); ИначеЕсли Найти(Текст, "\") <> 0 Тогда Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, "\"); Иначе Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, " "); КонецЕсли; Если Подстроки.Количество() = 1 Тогда // единственное слово - пытаемся получить месяц Если ОбщегоНазначения.ТолькоЦифрыВСтроке(Текст) Тогда МесяцЧислом = Число(Текст); Если МесяцЧислом >= 1 и МесяцЧислом <=12 Тогда ДатаПоТексту = Дата(ТекущийГод, МесяцЧислом, 1); Если СтрДлина(Текст) = 1 Тогда СписокВозврата.Добавить(Формат(ДатаПоТексту, "ДФ='М/гг'")); Иначе СписокВозврата.Добавить(Формат(ДатаПоТексту, "ДФ='ММ/гг'")); КонецЕсли; Иначе Возврат СписокВозврата; КонецЕсли; Иначе СписокМесяцев = СписокМесяцевПоСтроке(Текст); Для Каждого Месяц Из СписокМесяцев Цикл ДатаПоТексту = Дата(ТекущийГод, Месяц, 1); СписокВозврата.Добавить(Формат(ДатаПоТексту, "ДФ='ММММ гг'")); КонецЦикла; КонецЕсли; ИначеЕсли Подстроки.Количество() = 2 Тогда // два слова - первое считаем месяцем, второе - годом Если ОбщегоНазначения.ТолькоЦифрыВСтроке(Подстроки[1]) Тогда Если ПустаяСтрока(Подстроки[1]) Тогда ГодЧислом = 0; Подстроки[1] = "0"; ТекстВозврата = Текст + "0"; Иначе ГодЧислом = Число(Подстроки[1]); ТекстВозврата = ""; КонецЕсли; Если ГодЧислом > 3000 Тогда Возврат СписокВозврата; КонецЕсли; Если СтрДлина(Подстроки[1]) <= 1 Тогда ГодЧислом = Число(Лев(Формат(ТекущийГод, "ЧГ="), 3) + Подстроки[1]); СтрокаФорматированияГода = "г"; ИначеЕсли СтрДлина(Подстроки[1]) = 2 Тогда ГодЧислом = Число(Лев(Формат(ТекущийГод, "ЧГ="), 2) + Подстроки[1]); СтрокаФорматированияГода = "гг"; ИначеЕсли СтрДлина(Подстроки[1]) = 3 Тогда ГодЧислом = Число(Лев(Формат(ТекущийГод, "ЧГ="), 1) + Подстроки[1]); СтрокаФорматированияГода = "гггг"; КонецЕсли; Иначе // второе слово может быть только годом Возврат СписокВозврата; КонецЕсли; Если ОбщегоНазначения.ТолькоЦифрыВСтроке(Подстроки[0]) Тогда МесяцЧислом = Число(Подстроки[0]); Если МесяцЧислом >= 1 и МесяцЧислом <= 12 Тогда // если "правильный" месяц и год ДатаПоТексту = Дата(ГодЧислом, МесяцЧислом, 1); СписокВозврата.Добавить(ТекстВозврата); Иначе Возврат СписокВозврата; КонецЕсли; Иначе СписокМесяцев = СписокМесяцевПоСтроке(Подстроки[0]); Если СписокМесяцев.Количество() = 1 Тогда ДатаПоТексту = Дата(ГодЧислом, СписокМесяцев[0], 1); СписокВозврата.Добавить(""); Иначе Для Каждого Месяц Из СписокМесяцев Цикл ДатаПоТексту = Дата(ГодЧислом, Месяц, 1); СписокВозврата.Добавить(Формат(Дата(ГодЧислом, Месяц, 1), "ДФ='ММММ гг'")); КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; Возврат СписокВозврата; КонецФункции |
|||
11
ProgaN
05.04.12
✎
07:40
|
все спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |