mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-02-13 19:42:02 +02:00
Фикс загрузки из макетов при использовании английской локали платформы
This commit is contained in:
parent
20f4c24244
commit
01d455ce2d
1
.github/workflows/main-build.yml
vendored
1
.github/workflows/main-build.yml
vendored
@ -45,7 +45,6 @@ jobs:
|
||||
tests_linux_en:
|
||||
name: Tests Linux 8.3.21.1895 en_US
|
||||
uses: ./.github/workflows/run-tests-linux.yml
|
||||
if: false
|
||||
needs: build_artifacts
|
||||
with:
|
||||
v8_version: 8.3.21.1895
|
||||
|
@ -73,44 +73,82 @@
|
||||
|
||||
Функция ПривестиЗначениеКДате(ОписаниеТипа, Знач Значение) Экспорт
|
||||
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
Если ЗначениеЗаполнено(Результат) Тогда
|
||||
Возврат Результат;
|
||||
ДатаМассив = СтрРазделить(Значение, ".,:T-/ ");
|
||||
|
||||
НетВремени = 3;
|
||||
ЕстьВремя = 7;
|
||||
Полдень = 12;
|
||||
|
||||
ДлинаДеньМесяц = 2;
|
||||
ДлинаГод = 4;
|
||||
|
||||
ДатаИзСтроки_ПроверкаДлиныДаты(ДатаМассив.Количество(), НетВремени, ЕстьВремя);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ДатаИзСтроки_ОбработкаМассиваДаты(ДатаМассив); // если вдруг кто-то забыл вставить что-то между разделителями.
|
||||
|
||||
ДатаИзСтроки_ПроверкаМесяца(ДатаМассив[1]); // проверка месяца, корректно или нет
|
||||
|
||||
Если ДатаМассив.Количество() = ЕстьВремя Тогда // время формата HH:mm:ss tt или H:mm:ss tt
|
||||
|
||||
ВГр = ДатаМассив.ВГраница();
|
||||
ПозЧас = 3;
|
||||
|
||||
ДатаМассив[ВГр] = ВРег(ДатаМассив[ВГр]);
|
||||
ЧасДоп = ?(ДатаМассив[ВГр] = "PM", Полдень, 0);
|
||||
ДатаМассив.Удалить(ВГр);
|
||||
|
||||
// если все-таки решили вписать не существующий формат попробуем его воспринять адекватно.
|
||||
ДатаМассив[ПозЧас] = Строка(?(Число(ДатаМассив[ПозЧас]) + ЧасДоп >= 24, ДатаМассив[ПозЧас], Число(ДатаМассив[ПозЧас]) + ЧасДоп));
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
МассивРазделителей = Новый Массив;
|
||||
МассивРазделителей.Добавить(".");
|
||||
МассивРазделителей.Добавить("/");
|
||||
МассивРазделителей.Добавить("-");
|
||||
Для Индекс = 0 По ДатаМассив.ВГраница() Цикл // добавляем ведущие нули в маски d.M.yy, yy.M.d, H:mm:ss
|
||||
|
||||
СтрокаДаты = Неопределено;
|
||||
|
||||
КоличествоБлоковДаты = 3;
|
||||
ДлинаГода = 4;
|
||||
|
||||
Для Каждого Разделитель Из МассивРазделителей Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(СтрокаДаты) Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
МассивЧастейДат = СтрРазделить(Значение, Разделитель);
|
||||
|
||||
Если МассивЧастейДат.Количество() = КоличествоБлоковДаты Тогда
|
||||
|
||||
Если СтрДлина(МассивЧастейДат[2]) = ДлинаГода Тогда
|
||||
СтрокаДаты = МассивЧастейДат[2] + МассивЧастейДат[1] + МассивЧастейДат[0];
|
||||
ИначеЕсли СтрДлина(МассивЧастейДат[0]) = ДлинаГода Тогда
|
||||
СтрокаДаты = МассивЧастейДат[0] + МассивЧастейДат[1] + МассивЧастейДат[2];
|
||||
Иначе
|
||||
СтрокаДаты = "20" + МассивЧастейДат[2] + МассивЧастейДат[1] + МассивЧастейДат[0];
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
ДатаМассив[Индекс] = Формат(Число(ДатаМассив[Индекс]), "ЧЦ=" + ?(СтрДлина(ДатаМассив[Индекс]) > ДлинаДеньМесяц, "4", "2") + "; ЧВН=; ЧГ=0; ЧН=00");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(СтрокаДаты);
|
||||
ПозГод = 2;
|
||||
ПозМесяц = 1;
|
||||
ПозДень = 0;
|
||||
|
||||
// Проверка гггг.мм.дд или дд.мм.гггг
|
||||
Если СтрДлина(ДатаМассив[ПозГод]) = ДлинаГод Тогда
|
||||
|
||||
ВремДата = ДатаМассив[ПозДень];
|
||||
ДатаМассив[ПозДень] = ДатаМассив[ПозГод];
|
||||
ДатаМассив[ПозГод] = ВремДата;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// обработка масок dd.MM.yy и yy.MM.dd, первая маска в приоритете.
|
||||
Если СтрДлина(ДатаМассив[0]) = ДлинаДеньМесяц И СтрДлина(ДатаМассив[ПозГод]) = ДлинаДеньМесяц Тогда
|
||||
|
||||
УсловнаяГраница = 66; // что больше, то 20 век, что меньше - 21
|
||||
Год = ?(Число(ДатаМассив[ПозГод]) > УсловнаяГраница, "19", "20");
|
||||
|
||||
Попытка // попытаемся превратить ее в дату
|
||||
|
||||
// Собственно - проверка, попытка получить дату
|
||||
//@skip-check module-unused-local-variable - Необходима для помещения результата получения даты из строки.
|
||||
ТестоваяДата = Дата(Год + ДатаМассив[ПозГод] + ДатаМассив[ПозМесяц] + ДатаМассив[ПозДень]);
|
||||
|
||||
ВремДата = ДатаМассив[ПозДень];
|
||||
ДатаМассив[ПозДень] = (Год + ДатаМассив[ПозГод]);
|
||||
ДатаМассив[ПозГод] = ВремДата;
|
||||
|
||||
Исключение // если не получилось, значит маска yy.MM.dd
|
||||
|
||||
ТестоваяДата = Неопределено;
|
||||
ДатаМассив[ПозДень] = (Год + ДатаМассив[ПозДень]);
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(СтрСоединить(ДатаМассив));
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
@ -118,6 +156,7 @@
|
||||
|
||||
Функция ПривестиЗначениеКЧислу(ОписаниеТипа, Знач Значение) Экспорт
|
||||
|
||||
Значение = СтрЗаменить(Значение, ",", ".");
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
Если ЗначениеЗаполнено(Результат) Тогда
|
||||
Возврат Результат;
|
||||
@ -150,4 +189,45 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДатаИзСтроки_ПроверкаДлиныДаты(ДлинаСтроки, ДлинаБезВремени = 0, ДлинаСВременем = 0, ДатаСтрока = "")
|
||||
|
||||
Если ДлинаБезВремени = 0 ИЛИ ДлинаСВременем = 0 Тогда
|
||||
|
||||
ДлинаБезВремени = 6;
|
||||
ДлинаСВременем = 22;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// Временные зоны не поддерживаются, однако формат даты в нулевой зоне попадает в допустимую длину других поддерживаемых форматов.
|
||||
ДлинаДатыВНулевойЗоне = 20;
|
||||
ЭтоНулеваяЗона = ДлинаСтроки = ДлинаДатыВНулевойЗоне И СтрЗаканчиваетсяНа(ДатаСтрока, "Z");
|
||||
|
||||
Если ДлинаСтроки < ДлинаБезВремени Или ДлинаСтроки > ДлинаСВременем Или ЭтоНулеваяЗона Тогда
|
||||
|
||||
ВызватьИсключение "Дата в строке не подходит ни под одну маску.";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДатаИзСтроки_ОбработкаМассиваДаты(ДатаМассив)
|
||||
|
||||
Для Индекс = 0 По ДатаМассив.ВГраница() Цикл
|
||||
|
||||
ДатаМассив[Индекс] = ?(СтрДлина(ДатаМассив[Индекс]) = 0, "0", ДатаМассив[Индекс]);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДатаИзСтроки_ПроверкаМесяца(МесяцСтрокой)
|
||||
|
||||
Если Число(МесяцСтрокой) > 12 Или Число(МесяцСтрокой) = 0 Тогда
|
||||
|
||||
ВызватьИсключение "Месяц выходит за границы диапазона.";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
Loading…
x
Reference in New Issue
Block a user