Почему этот код возвращает неверную дату?
QLocale locale("es");
QDate date = locale.toDate("1-Jun-14", "d-MMM-yy");
Если отладить переменную локали, она корректно инициализируется как локаль es_ES, но не возвращает дату и date.isValid()
возвращает ложь
Я не знаю почему, но вы должны поставить .
за месяц (короткая версия).
Я попробовал следующий код:
QLocale locale("es");
qDebug() << locale.standaloneMonthName(6, QLocale::ShortFormat);
QDate date = locale.toDate("01-Jun.-14", "dd-MMM-yy");
qDebug() << date;
Выход был на удивление:
"Jun."QDate("1914-06-01")
Блокирует как ошибка для меня и терпит неудачу, если я пытаюсь использовать его, например, немецкий язык.
Обновить: Ладно, я понял. Это довольно запутанно. Вы должны взять короткое имя, данное locale.monthName
, Это, например, для «Июнь» для ES и «Juni» для DE. Это не имеет никакого смысла. В Германии короткое название «Juni» — «Jun». Для Испании я не знаю этого. Это ошибка.
Обновление 2Я думаю, что понимаю систему (по крайней мере, для немецкого языка). Если полное имя превышает 4 символа (например, «Januar»), краткая версия — это настоящая короткая форма («Jan») с добавленной точкой («Jan.»). Если полное имя короче 4 символов, краткая форма точно такая же, как и длинная форма (например, «Mai»). Но я не понимаю, почему точка добавляется, поскольку для локали EN она не добавляется.
Я открыл дело по QT, и ответ таков:
Данные Unicode CLDR для испанского языка имеют точку после названия месяца.
Это не ошибка, ей нужна точка.
Больше деталей: https://bugreports.qt-project.org/browse/QTBUG-39519