Именно на основе запуска утверждаю изначально, что она работает.
2. Юзер может добавить секунды
Штатная функция с этим справляется без проблем. Кастомая может быть полезна только с точки зрения производительности (не проверял) и вариантов "01:87" (проверял).
Всё штатное рассчитано для "тепличного" случая - когда пользователь сознательно вводит КОРРЕКТНЫЕ данные. Но мы то живём в реальном мире :) и знаем чего могут пользователи наворотить. Поэтому "штатное" для способа ввода вида
совсем не подходит.
"1:1" оно никакое, ни корректное, ни некорректное, так как реал может быть "01:01","01:10" и еще 2 варианта. И угадывать тут нечего, надо выдать пользователю сообщение и закрыться.
"1:1" оно никакое, ни корректное, ни некорректное, так как реал может быть "01:01","01:10" и еще 2 варианта. И угадывать тут нечего, надо выдать пользователю сообщение и закрыться.
Вполне корректное "1:1" час и минута без ведущих нулей , и вариант всего один "01:01"
Когда встаёт задача задать во входных параметрах время в формате ЧЧ:ММ, приходится решать дилему: удобство пользователя при вводе значений или удобство программирования.
Вариант 1:
Самый известный способ ввода:
Плюсы:
* "человеческий" внешний вид значения:
Минусы:
* довольно много проверок, для того, чтобы корректно перевести эту строку в целый тип или в datetime.
* не предназначено для оптимизации в тестере.
Самая первая проверка (которая уже ставит пользователя в ограничительные рамки) - требование придерживаться формата именно ЧЧ:ММ (например 04:09), а не Ч:ММ (например 4:09) или Ч:М (например 4:9).
И даже здесь уже распутье: а может разрешить пользователю ввод в формате Ч:ММ (например 4:09) или Ч:М (например 4:9)?
...
Спасибо за подсказки.
Самый первый шаг теперь выглядит так: отсечь пробелы справа и слева, а потом проверить текст на длину.
Шаг второй: замена "-" и "_" на корректный разделитель ":", а потом поиск разделителя ":"
//+------------------------------------------------------------------+//| Check HH:MM To Time |//+------------------------------------------------------------------+bool CheckHHMMToTime(string text)
{
bool result=true;
//--- step 1: the number of characters must be at least 3 and not more than 5StringTrimRight(text); // delete spaces to the rightStringTrimLeft(text); // delete spaces to the left if(StringLen(text)<3 || StringLen(text)>5)
{
Print("Length of the text can't be less than 3 and more than 5");
return(false);
}
//--- step 2: search for a separator ":"StringReplace(text,"-",":"); // search and replacement of symbol "-"StringReplace(text,"_",":"); // search and replacement of symbol "_"int search_results=0;
for(int i=0;i<StringLen(text);i++)
if(text[i]==':')
search_results++;
if(search_results==0)
{
Print("Divider \":\" it isn't found");
return(false);
}
if(search_results>1)
{
Print("More than one divider \":\" are found");
return(false);
}
//---return(result);
}
На входе надо зачистить от пробелов и бонусом можно добавить замену тире (2 типа) на двоеточие
datetime не подойдёт для вычисления секунды произвольного дня типа 'вчера' или 'завтра'
.
datetime не подойдёт для вычисления секунды произвольного дня типа 'вчера' или 'завтра'
Не понял
1. Вы бы запустили свою функцию
2. Юзер может добавить секунды
1. Вы бы запустили свою функцию
Именно на основе запуска утверждаю изначально, что она работает.
2. Юзер может добавить секунды
Штатная функция с этим справляется без проблем. Кастомая может быть полезна только с точки зрения производительности (не проверял) и вариантов "01:87" (проверял).
Всё штатное рассчитано для "тепличного" случая - когда пользователь сознательно вводит КОРРЕКТНЫЕ данные. Но мы то живём в реальном мире :) и знаем чего могут пользователи наворотить. Поэтому "штатное" для способа ввода вида
совсем не подходит.
"1:1" оно никакое, ни корректное, ни некорректное, так как реал может быть "01:01","01:10" и еще 2 варианта. И угадывать тут нечего, надо выдать пользователю сообщение и закрыться.
Лучше две переменных int, одна для часов, другая для минут, и проверку проще делать и оптимизировать можно.
"1:1" оно никакое, ни корректное, ни некорректное, так как реал может быть "01:01","01:10" и еще 2 варианта. И угадывать тут нечего, надо выдать пользователю сообщение и закрыться.
Вполне корректное "1:1" час и минута без ведущих нулей , и вариант всего один "01:01"
Лучше две переменных int, одна для часов, другая для минут, и проверку проще делать и оптимизировать можно.
Это будет "Вариант ввода №2". Попозжее.
Когда встаёт задача задать во входных параметрах время в формате ЧЧ:ММ, приходится решать дилему: удобство пользователя при вводе значений или удобство программирования.
Вариант 1:
Самый известный способ ввода:
Плюсы:
Минусы:
Самая первая проверка (которая уже ставит пользователя в ограничительные рамки) - требование придерживаться формата именно ЧЧ:ММ (например 04:09), а не Ч:ММ (например 4:09) или Ч:М (например 4:9).
И даже здесь уже распутье: а может разрешить пользователю ввод в формате Ч:ММ (например 4:09) или Ч:М (например 4:9)?
...
Спасибо за подсказки.
Самый первый шаг теперь выглядит так: отсечь пробелы справа и слева, а потом проверить текст на длину.
Шаг второй: замена "-" и "_" на корректный разделитель ":", а потом поиск разделителя ":"