Git commit 4d509bb88b6b8bf40050e1d83af9611362bfaa6a by Alexander Bikadorov. Committed on 31/12/2016 at 15:42. Pushed by abikadorov into branch 'master'. FIXED: [ 374175 ] wrong date format parsing using date filter in search dia= log Plus fixed wrong century: number '16' is made to year '1916' by QLocale BUG: 374175 M +8 -11 krusader/Filter/advancedfilter.cpp M +7 -0 krusader/Filter/advancedfilter.h https://commits.kde.org/krusader/4d509bb88b6b8bf40050e1d83af9611362bfaa6a diff --git a/krusader/Filter/advancedfilter.cpp b/krusader/Filter/advancedf= ilter.cpp index d1165262..ce4fdc83 100644 --- a/krusader/Filter/advancedfilter.cpp +++ b/krusader/Filter/advancedfilter.cpp @@ -449,14 +449,14 @@ void AdvancedFilter::notModifiedAfterSetDate() void AdvancedFilter::changeDate(KLineEdit *p) { // check if the current date is valid - QDate d =3D QLocale().toDate(p->text()); + QDate d =3D stringToDate(p->text()); if (!d.isValid()) d =3D QDate::currentDate(); = KRGetDate *gd =3D new KRGetDate(d, this); d =3D gd->getDate(); // if a user pressed ESC or closed the dialog, we'll return an invalid= date if (d.isValid()) - p->setText(QLocale().toString(d, QLocale::ShortFormat)); + p->setText(dateToString(d)); delete gd; } = @@ -504,8 +504,8 @@ bool AdvancedFilter::getSettings(FilterSettings &s) } = s.modifiedBetweenEnabled =3D modifiedBetweenEnabled->isChecked(); - s.modifiedBetween1 =3D QLocale().toDate(modifiedBetweenData1->text()); - s.modifiedBetween2 =3D QLocale().toDate(modifiedBetweenData2->text()); + s.modifiedBetween1 =3D stringToDate(modifiedBetweenData1->text()); + s.modifiedBetween2 =3D stringToDate(modifiedBetweenData2->text()); = if (s.modifiedBetweenEnabled) { // check if date is valid @@ -526,7 +526,7 @@ bool AdvancedFilter::getSettings(FilterSettings &s) } = s.notModifiedAfterEnabled =3D notModifiedAfterEnabled->isChecked(); - s.notModifiedAfter =3D QLocale().toDate(notModifiedAfterData->text()); + s.notModifiedAfter =3D stringToDate(notModifiedAfterData->text()); = if(s.notModifiedAfterEnabled && !s.notModifiedAfter.isValid()) { invalidDateMessage(notModifiedAfterData); @@ -586,13 +586,10 @@ void AdvancedFilter::applySettings(const FilterSettin= gs &s) else anyDateEnabled->setChecked(true); = - modifiedBetweenData1->setText( - QLocale().toString(s.modifiedBetween1, QLocale::ShortFormat)); - modifiedBetweenData2->setText( - QLocale().toString(s.modifiedBetween2, QLocale::ShortFormat)); + modifiedBetweenData1->setText(dateToString(s.modifiedBetween1)); + modifiedBetweenData2->setText(dateToString(s.modifiedBetween2)); = - notModifiedAfterData->setText( - QLocale().toString(s.notModifiedAfter, QLocale::ShortFormat)); + notModifiedAfterData->setText(dateToString(s.notModifiedAfter)); = modifiedInTheLastData->setValue(s.modifiedInTheLast.amount); modifiedInTheLastType->setCurrentIndex(s.modifiedInTheLast.unit); diff --git a/krusader/Filter/advancedfilter.h b/krusader/Filter/advancedfil= ter.h index 57051abb..ac50990b 100644 --- a/krusader/Filter/advancedfilter.h +++ b/krusader/Filter/advancedfilter.h @@ -116,6 +116,13 @@ private: void changeDate(KLineEdit *p); void fillList(KComboBox *list, QString filename); void invalidDateMessage(KLineEdit *p); + static QDate stringToDate(const QString& text) { + // 30.12.16 is interpreted as 1916-12-30 + return QLocale().toDate(text, QLocale::ShortFormat).addYears(100); + } + static QString dateToString(const QDate& date) { + return QLocale().toString(date, QLocale::ShortFormat); + } }; = #endif /* ADVANCEDFILTER_H */