Как я могу преобразовать персидские числа в английские числа с помощью QLocale?
Я хочу преобразовать персидские числа в английские числа, используя QLocale
, я написал этот код, но он не работает:
int main(void)
{
QLocale english_number(QLocale::Language::English, QLocale::Country::UnitedStates);
QTime time;
time = english_number.toTime("۱۲:۳۲", "HH:mm");
qDebug() << time;
}
Вывод в консоль:
QTime(Invalid)
Но можно преобразовать английские числа в персидские числа:
QLocale persian_number(QLocale::Language::Persian, QLocale::Country::Iran);
time = persian_number.toTime("13:32", "HH:mm");
qDebug() << time;
Консольный вывод:
QTime("13:32:00.000")
Где я неправ?
- Qt: 5.14.1
- ОС: Archlinux-5.6.7-arch1-1
- Компилятор: GCC 9.3
2 ответа
Решение
Я думаю, что это ошибка Qt, потому что я делал это перед преобразованием в QTime
нам нужно преобразовать персидские числа в int
а затем преобразовать в QTime
.
Приведенная ниже статическая функция может быть полезна для преобразования строки, содержащей номер Persion, в английское число:
QString Helper::PersianToEnglish(QString persianStr)
{
QString per = "۰۱۲۳۴۵۶۷۸۹";
for (int i = 0; i < 10;i++) {
while(persianStr.contains(per[i]))
{
int idx = persianStr.indexOf(per[i]);
if(idx == -1)
break;
persianStr.replace(idx,1,QString::number(i));
}
}
return persianStr;
}